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


    目录

    一、背景

    二、示例 

     2.1安装

    2.2绘制流程


    一、背景

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

    京东零售:asyncTool

    Gobrs-Async

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

    二、示例 

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

     2.1安装

    以springboot项目为例,引入依赖

    1. <dependency>
    2. <groupId>io.github.memorydoc</groupId>
    3. <artifactId>gobrs-async-starter</artifactId>
    4. <version>1.2.1-RELEASE</version>
    5. </dependency>

    2.2绘制流程

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

    1. spring:
    2. gobrs:
    3. async:
    4. rules:
    5. # 支持多命名空间
    6. - name: "ruleName" # 规则名称
    7. content: "aService->bService->cService"

    创建执行单元

    1. @Component
    2. public class AService extends AsyncTask {
    3. @Override
    4. public void prepare(Object o) {
    5. }
    6. @Override
    7. public Object task(Object o, TaskSupport support) {
    8. //获取任务执行时传递的公共参数
    9. Map param = (Map) getParam(support);
    10. //在BService中获取上一单元的执行结果
    11. //String result = getResult(support, AService.class);
    12. return null;
    13. }
    14. @Override
    15. public boolean nessary(Object o, TaskSupport support) {
    16. return true;
    17. }
    18. @Override
    19. public void onSuccess(TaskSupport support) {
    20. }
    21. @Override
    22. public void onFail(TaskSupport support) {
    23. }
    24. }

    使用任务触发器

    1. @Autowired
    2. private GobrsAsync gobrsAsync;

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

    1. // 一行代码即可启动任务流程
    2. Map params = new HashMap();
    3. // 任务流程名称 , 任务流程传入参数, 任务流程超时时间
    4. AsyncResult asyncResult = gobrsAsync.go("ruleName", () -> params, timeOut);

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

    #参数类型一

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

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

    #参数类型二

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

    1. User user = new User();
    2. Fruit fruit = new Fruit();
    3. Map params = new HashMap();
    4. // 需要传递参数的 bean 类, 考虑开发者开发喜欢,直接key设计成class 类型
    5. params.put(AService.class, user);
    6. params.put(BService.class, fruit);
    7. AsyncResult asyncResult = gobrsAsync.go("ruleName", () -> params, timeOut);
  • 相关阅读:
    【C++面向对象】11. 数据抽象*
    Observability and Inconsistency in a Nutshell
    基于单片机的推箱子游戏仿真设计(#0014)
    chromadb
    sealos 与其它流行产品的差异与联系
    自适应AI chatGPT智能聊天创作官网html源码/最新AI创作系统/ChatGPT商业版网站源码
    20款短视频自媒体必备工具,让你的运营效率翻倍
    [附源码]java毕业设计高考志愿智能推荐系统
    HTTP请求报文与响应报文
    高频面试题
  • 原文地址:https://blog.csdn.net/doupengzp/article/details/126487061