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

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

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

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

    • 🍅规则配置
      • 完整配置示例
      • 配置文件位置
      • 规则组成
      • 规则名称 name
      • 规则内容 content
      • 日志配置 logConfig
      • 异常捕获
      • 规则示例
      • 场景一
      • 场景二
      • 场景三
      • 场景四
      • 场景五
        • 示例一
        • 示例二
        • 示例三
        • 示例四
        • 第一步 任务编写
        • 第二步 任务配置
        • 注意
      • 规则总结
  • 🥊任务类型

    • 🍅普通任务
    • 💥重试任务
    • ☄️事务任务
    • 🌈超时任务
    • ⛱方法任务
  • 🔥高级特性

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

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

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

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

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

    • 🍊展望
  • 🍯联系作者

    • 🥐加群沟通
目录

🍅规则配置

# 完整配置示例

gobrs:
  async:
    config:
      rules:
        # 规则 是数组类型的 多组规则
        - name: "general"
          content: "AService->BService->FService->GService->HService;EService->CService;AService"
          task-interrupt: true # 局部异常是否打断主流程 默认false
          transaction: true
        - name: "anyConditionGeneral"
          content: "AServiceCondition,BServiceCondition,CServiceCondition->DServiceCondition"
          logConfig:
            costLogabled: false # 开启任务耗时打印 log日志级别需要为 error 默认true
            errLogabled: true # 开启任务异常打印 默认true
        #  AServiceCondition 、BServiceCondition、CServiceCondition任务谁返回true 谁有资格继续往下执行
        - name: "anyConditionRule"
          content: "AServiceCondition,BServiceCondition,CServiceCondition->DServiceCondition:anyCondition"

        - name: "anyConditionRuleAppend"
          content: "AServiceCondition,BServiceCondition,CServiceCondition->DServiceCondition:anyCondition->EServiceCondition"

        # 官方场景一 https://async.sizegang.cn/pages/2f844b/#%E5%9C%BA%E6%99%AF%E4%B8%80
        - name: "caseOne"
          content: "caseOneTaskA->caseOneTaskB,caseOneTaskC,caseOneTaskD"

        # 官方场景二 https://async.sizegang.cn/pages/2f844b/#%E5%9C%BA%E6%99%AF%E4%BA%8C
        - name: "caseTwo"
          content: "caseTwoTaskA->caseTwoTaskB->caseTwoTaskC,caseTwoTaskD"
        # 官方场景三 https://async.sizegang.cn/pages/2f844b/#%E5%9C%BA%E6%99%AF%E4%B8%89
        - name: "caseThree"
          content: "caseThreeTaskA->caseThreeTaskB,caseThreeTaskC,caseFourTaskD->caseThreeTaskG;
                    caseThreeTaskA->caseThreeTaskE,caseThreeTaskF->caseThreeTaskG;"
        # 官方场景四 https://async.sizegang.cn/pages/2f844b/#%E5%9C%BA%E6%99%AF%E5%9B%9B
        - name: "caseFour"
          content: "caseFourTaskA->caseFourTaskB->caseFourTaskC,caseFourTaskD,caseFourTaskE;
                    caseFourTaskA->caseFourTaskH->caseFourTaskI,caseFourTaskJ,caseFourTaskK;"
          logConfig:
            costLogabled: false # 关闭耗时任务打印
        # 官方场景五 https://async.sizegang.cn/pages/2f844b/#%E5%9C%BA%E6%99%AF%E4%BA%94
        - name: "caseFive"
          content: "caseFourTaskA,caseFourTaskB,caseFourTaskC->caseFourTaskD:any:exclusive" # any 任意一个任务(A、B、C)执行完成后 则执行D任务
          # exclusive 避免任务执行浪费 所以 D执行完成之后 会主动 中断 未完成的任务
server:
  port: 9999 # 端口: 8080

# 配置文件位置

如果开发者配置较多 与 springboot 配置文件放在一起有点冗余的话,可以在 resources/config 目录下创建以下配置文件都是支持的。

  • gobrs.yaml

  • gobrs.yml

  • gobrs.properties

# 规则组成

# 规则名称 name

规则对象又两部分组成:

  • 规则名称
  • 规则内容

规则名称(name) 约定规则的唯一标识符: 在任务触发器开发触发任务的时候需要传递。

# 规则内容 content

规则内容(content) 则是规则引擎解析的核心内容,根据任务执行流程不同,任务规则配置也会不同,但是不会很复杂,详细配置流程分为一下几种场景。

# 日志配置 logConfig

  • costLogabled 流程日志打印 包括耗时时间,调用链路等
  • errLogabled 任务执行异常日志打印

小提示

我们先说几种场景, 看完之后配置规则你自己就有感觉了

注: 下方配置中的 A、B、C 是指 动态任务在Spring中的Bean名称, 可以使用 @Task("xxx") 定义 ruleName1 代表规则名称,

# 异常捕获

在流程配置task-interrupt时,有些开发者不希望任务执行的异常被gobrs-async包装。 而是想亲自进行异常捕获,根据异常类型进行不同业务处理。此时可以配置 异常抛出配置: catchable

    - name: "stopAsyncRule"
      content: "stopAsyncTaskA,stopAsyncTaskB,stopAsyncTaskC;stopAsyncTaskD->stopAsyncTaskE->stopAsyncTaskF"
      catchable: true

# 规则示例

# 场景一

如图1-1

场景一

说明 任务A 执行完了之后,继续执行 B、C、D

配置

gobrs:
async:
  rules:
    - name: "ruleName1"
      content: "A->B,C,D"

# 场景二

如图1-2

场景二

说明 任务A 执行完了之后执行B 然后再执行 C、D

配置

gobrs:
async:
  rules:
    - name: "ruleName1"
      content: "A->B->C,D"

# 场景三

如图1-3

场景二

说明 任务A 执行完了之后执行B、E 然后按照顺序 B的流程走C、D、G。 E的流程走F、G

配置

gobrs:
async:
  rules:
    - name: "ruleName1"
      content: "A->B->C->D->G;A->E->F->G"

# 场景四

如图1-4

场景二

说明 这种任务流程 Gobrs-Async 也能轻松支持

配置

gobrs:
async:
  rules:
    - name: "ruleName1"
      content: "A->B->C,D,E;A->H->I,J,K"

# 场景五

如图1-5

场景二

# 示例一

说明 A、B、C 执行完之后再执行D

配置

gobrs:
async:
  rules:
    - name: "ruleName1"
      content: "A,B,C->D"

# 示例二

说明 A、B、C 任务任意一个执行完成,则立即执行任务D( 谁最快执行谁执行, 类似于任务流程竞争关系 ) 此时可以使用 配置关键字 :any

配置

gobrs:
async:
  ## :any 是关键字 表示任意 依赖的任务执行完成立即执行自己
  rules:
    - name: "ruleName1"
      content: "A,B,C->D:any"

# 示例三

说明 A、B、C 任务任意一个执行完成,则立即执行任务D( 谁最快执行谁执行, 类似于任务流程竞争关系 ) 与示例不同的是, 如果 D拿到执行权后,会将自身所依赖的未完成的任务 强制中断执行(避免浪费资源,业务运行等) 此时可以使用 配置关键字 :exclusive

配置

gobrs:
async:
  ## :exclusive 是关键字
  rules:
    - name: "ruleName1"
      content: "A,B,C->D:any:exclusive"

# 示例四

同示例二有点类似,在示例二的场景下,无法根据某一个任务的执行成功或者失败进行后续任务的处理,示例二完全根据线程调度执行的随机顺序进行执行,即谁先执行完 谁有资格继续往下执行,所以如果想 执行结果的条件 即: task 方法返回 true 则立即执行,返回false则不执行的判断条件进行控制。那么就有以下的实现方式。

# 第一步 任务编写

(如果不清楚如何开发一个动态任务,请阅读下一章节:动态任务)

    @Override
    public Boolean task(Object o, TaskSupport support) {
        try {
            System.out.println("AServiceCondition Begin");
            Thread.sleep(300);
            for (int i1 = 0; i1 < i; i1++) {
                i1 += i1;
            }
            System.out.println("AServiceCondition Finish");
        } catch (InterruptedException e) {
           // log 打印
           //e.printStackTrace();
           // 返回false 则没有资格执行子任务的逻辑
           return false;
         
        }
        // 返回true 进行执行子任务的逻辑
        return true;
    }

# 第二步 任务配置

gobrs:
async:
  ## :any 是关键字 表示任意 依赖的任务执行完成立即执行自己
  rules:
    - name: "ruleName1"
      content: "A,B,C->D:anyCondition"

# 注意

示例三 需要和 示例二配合生效, 因为这两种示例是结合的一种场景。

# 规则总结

规则配置跟流程图几乎非常相近。

  • 在任务分叉时 使用 , 区分不同任务。
  • 在任务流程发起时 用-> 区分任务流。
  • 每个任务流结束后 用; 进行结束配置。

提示

如果你不习惯使用以上配置符号,想自定义在配置符号, 在 Gobrs-Async 中也是支持配置的,可以根据用户使用喜欢进行灵活配置 只需要 在application.yml 中配置即可

Last Updated: 12/30/2022, 6:10:58 PM
🏝流程结果
🍅普通任务

← 🏝流程结果 🍅普通任务→

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