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

目录

一、背景

二、示例 

 2.1安装

2.2绘制流程


一、背景

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

京东零售:asyncTool

Gobrs-Async

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

二、示例 

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

 2.1安装

以springboot项目为例,引入依赖

<dependency>
    <groupId>io.github.memorydoc</groupId>
    <artifactId>gobrs-async-starter</artifactId>
    <version>1.2.1-RELEASE</version>
</dependency>

2.2绘制流程

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

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

创建执行单元

@Component
public class AService  extends AsyncTask<Object, Object> {

 
    @Override
    public void prepare(Object o) {

    }

    @Override
    public Object task(Object o, TaskSupport support) {
       //获取任务执行时传递的公共参数
        Map<String, Object> param = (Map<String, Object>) 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<String, Object> 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<String,Object> params = new HashMap();
// 需要传递参数的 bean 类, 考虑开发者开发喜欢,直接key设计成class 类型
params.put(AService.class, user);
params.put(BService.class, fruit);

AsyncResult asyncResult = gobrsAsync.go("ruleName", () -> params, timeOut);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值