Gobrs-Async Gobrs-Async
🚘首页
🧧指南
🍭FAQ
💖支持
🚨加入群聊
🍅GitEE (opens new window)
GitHub (opens new window)
🚘首页
🧧指南
🍭FAQ
💖支持
🚨加入群聊
🍅GitEE (opens new window)
GitHub (opens new window)
  • 🥪项目特性

    • 🍿框架设计
  • 🎒框架设计

    • 🥧简介
    • 🍿框架设计
    • 🍍框架落地
  • 🍖快速开始

    • 🍔快速上手
    • 🌭框架集成
    • 🥤启动流程
    • 🍪流程参数
    • 🏝流程结果
  • 🥘规则配置

    • 🍅规则配置
  • 🥊任务类型

    • 🍅普通任务
      • 如何开发一个异步任务
      • 普通任务
        • 任务标识
        • 核心任务执行
        • 获取依赖的任务结果
        • 任务是否执行
        • 任务成功回调
        • 任务失败回调
    • 💥重试任务
    • ☄️事务任务
    • 🌈超时任务
    • ⛱方法任务
  • 🔥高级特性

    • 💐线程复用
    • 🧋运行日志
    • 🍜规则热更新
    • 🍑任务中断
    • 🌺可选子流程
    • 🌹状态流程
    • 🍒异常拦截
    • 🥪全局任务拦截
    • 🍏自定义线程池
    • 🍒可选的执行流程
  • 🚐插件

    • 🛻插件简介
    • 🏚监控系列

      • ⛽️skywalkiing
      • 🏖hippo4j
    • 🛸日志系列

      • 🚧全链路traceId
  • 🍿性能考量

    • 🍎框架压测
    • 🍹框架对比
    • 🧅版本号手册
  • 🌕展望

    • 🍊展望
  • 🍯联系作者

    • 🥐加群沟通
目录

🍅普通任务

# 如何开发一个异步任务

小提示

看到这里,小伙伴们是不是已经迫不及待的想真正的体验一下 Gobrs-Async 是怎样开发一个异步任务的。 那么下面由我带领大家来感受一下 一个完整的 AsyncTask 需要怎么开发。

# 普通任务

  • 创建 Bean 继承 AsyncTask
  • 标记 @Task 注解

# 任务标识

如果你想对 任务进行全局拦截 此时就需要对每一个任务加一个特殊的标识,这样在做全局拦截的时候,就可以区分不同的任务,从而执行不同的逻辑。或者进行不同的日志打印 MQ、链路监控等等。 那么 Gobrs-Async 为你提供了支持。 只需要在 任务 Bean 中加上注解, 则会告知框架此 任务的名称 即 全局任务拦截 ,其中 注解中的 name 值对应的就是全局拦截器中参数中的 taskName

@Task(name = "itemTask")

这里 AsyncTask<T, V> 是一个泛型接口

  • T 代表 任务的参数类型
  • V 代表 任务的返回类型

如下:

/**
 * @program: gobrs-async
 * @ClassName TaskBean
 * @description: 异步任务 任务参数 Object类型 ; 任务返回 Object类型
 **/
@Task
public class BService extends AsyncTask<Object, Object> {

    @Override
    public void prepare(Object o) {
        // 任务开始之前的操作 即task 之前
    }

    @Override
    public Object task(Object o, TaskSupport support) {
        String result = getResult(support, AService.class);
        System.out.println("拿到的结果" + result);
        System.out.println("执行BService");
        return null;
    }

    // 什么条件下触发 task执行
    @Override
    public boolean nessary(Object o, TaskSupport support) {
        return true;
    }

    // task执行成功回调用
    @Override
    public void onSuccess(TaskSupport support) {

    }
    
    // task 执行失败 回调
    @Override
    public void onFail(TaskSupport support) {

    }
}

# 核心任务执行

核心任务为使用者最为关注的功能方法,需要开发RPC、HTTP、IO 等消耗系统资源的业务逻辑。

@Override
public Object task(Object o, TaskSupport support) {
    // todo 业务逻辑
    return null;
}

# 获取依赖的任务结果

Gobrs-Async 提供了 getResult 方法,无需用户关注如何获取到的依赖结果,只需要按照使用方式便可轻松获取所需结果值

@Override
public Object task(Object o, TaskSupport support) {
    // 拿到 AService (任务bean) 返回的结果, 结果类型为String类型
    String result = getResult(support, AService.class, String.class);
    
    return null;
}

getResult 有三个参数

  • TaskSupport : Gobrs-Async 所需要的核心参数,通过 task 方法中的参数透穿即可
  • Class: 所依赖的 Bean的 Java 类型
  • Class: 返回结果的类型

# 任务是否执行

Gobrs-Async 会根据 nessary 的返回结果,判断当前task 是否需要执行 如果返回true 则需要被执行,否则返之。

例如: 当参数为 cancel 时, 任务不执行。

@Override
public boolean nessary(String params, TaskSupport support) {
     // 假如参数是cancel 则不执行当前任务
    if("cancel".equals(params)){
        return false;
    }
    return true;
}

# 任务成功回调

如果你想在任务执行完成后做一些额外的操作。例如打印日志、发送邮件、发送MQ、记录信息等。 Gobrs-Async 同样也为你考虑到了。通过实现 callback 方法。会让你轻松的拿到 任务的执行结果。

@Override
public void onSuccess(TaskSupport support) {
    // todo 任务成功逻辑
}

# 任务失败回调

在任务异常时发送告警信息

@Override
public void onFail(TaskSupport support) {
    // todo  任务执行失败回调逻辑
}
Last Updated: 11/4/2022, 3:19:44 PM
🍅规则配置
💥重试任务

← 🍅规则配置 💥重试任务→

最近更新
更多文章>
Gobrs-Async | Copyright © 2022-2023 Memorydoc | Apache License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式