高性能异步编排框架Gobrs-Async简单使用

目录

一、背景

二、示例 

 2.1安装

2.2绘制流程


一、背景

最近有需要用到异步任务编排,找了几个比较好用的框架:

京东零售:asyncTool

Gobrs-Async

两个都能满足开发中的需求,不过asyncTool需要在代码中写入大量WorkerWrapper,最后无意间翻到Gobrs-Async,相对于asyncTool来说,它可以全局拦截异常,编排流程比较容易,从节点的开始--执行--结束(中间出现异常)都有想对应的方法,具体其他的优势,可以看看官网放出的这张对比图:

高性能异步编排框架Gobrs-Async简单使用_第1张图片

二、示例 

这里举个最简单的多个执行单元的串行请求:

 2.1安装

以springboot项目为例,引入依赖


    io.github.memorydoc
    gobrs-async-starter
    1.2.1-RELEASE

2.2绘制流程

在springboot项目中,有两种绘制方式,一种是直接在application.yml配置文件中配置,如下:

spring:
  gobrs:
    async:
      rules:
        # 支持多命名空间
        - name: "ruleName" # 规则名称 
          content: "aService->bService->cService"

创建执行单元

@Component
public class AService  extends AsyncTask {

 
    @Override
    public void prepare(Object o) {

    }

    @Override
    public Object task(Object o, TaskSupport support) {
       //获取任务执行时传递的公共参数
        Map param = (Map) getParam(support);
       //在BService中获取上一单元的执行结果
       //String result = getResult(support, AService.class);
        return null;
    }




    @Override
    public boolean nessary(Object o, TaskSupport support) {
        return true;
    }

    @Override
    public void onSuccess(TaskSupport support) {

    }

    @Override
    public void onFail(TaskSupport support) {

    }
}

使用任务触发器

@Autowired
private GobrsAsync gobrsAsync;

#启动任务流程,其中ruleName为application.yml中的规则名称

// 一行代码即可启动任务流程

Map params  = new HashMap();
// 任务流程名称 , 任务流程传入参数, 任务流程超时时间 
AsyncResult asyncResult = gobrsAsync.go("ruleName", () -> params, timeOut);

任务流程的params参数 有两种参数形式。

#参数类型一

如果任务流程中所有任务 都是用同一个参数进行传递传递(类似于DataContext 上下文), 则params 直接传入公用的同一个参数即可

User user = new User();
AsyncResult asyncResult = gobrsAsync.go("ruleName", () -> user, timeOut);

#参数类型二

如果任务流程中不同任务使用不同的参数。则参数需要传递Map类型, Map的key 为 任务bean 名称, 值为所需要传递的参数值。

User user = new User();
Fruit fruit = new Fruit();
Map params = new HashMap();
// 需要传递参数的 bean 类, 考虑开发者开发喜欢,直接key设计成class 类型
params.put(AService.class, user);
params.put(BService.class, fruit);

AsyncResult asyncResult = gobrsAsync.go("ruleName", () -> params, timeOut);

你可能感兴趣的:(java,java,spring,boot)