RuleGo RuleGo
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • RuleGo-MCP-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • RuleGo-MCP-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文

广告采用随机轮播方式显示 ❤️成为赞助商
  • 快速入门

  • 规则链

  • 标准组件

  • 扩展组件

  • 自定义组件

  • 组件市场

  • 可视化

  • AOP

  • 触发器

  • 高级主题

  • RuleGo-Server

  • 问题

    • 关于规则引擎执行中断恢复
      • FAQ
      • 注册gRPC反射服务示例
    目录

    关于规则引擎执行中断恢复

    # 关于规则引擎执行中断恢复

    某些场景下需要规则引擎执行实例中断后恢复,例如:

    • 工作流审批场景: 在需要人工审批的工作流程中,规则引擎的执行可能需要暂停,直到获得必要的批准。
    • 第三方系统异步回调: 在依赖外部系统响应的场景中,规则引擎可能需要等待第三方系统的回调来继续执行。
    • 依赖服务不可用: 当规则引擎的执行依赖于外部服务(如数据库、消息队列等),而这些服务暂时不可用时,规则引擎的执行将被中断。

    以上要求规则引擎中断恢复场景,又不想引入工作流,RuleGo是一个不错的轻量级方案。RuleGo提供无状态的接口, 支持规则引擎执行中断恢复,即当规则引擎执行中断时,可以恢复到中断前的状态。

    以下是具体步骤:

    1. 通过规则引擎上下文ctx.DoOnEnd让本次执行实例中断,自定义节点处理或者Functions节点都可以操作上下文。
    func OnMsg(ctx types.RuleContext, msg types.RuleMsg)
    //处理逻辑
    //让本次执行实例执行中断,不执行后续节点,并把当前节点数据通知`OnEnd`回调函数
    ctx.DoOnEnd(msg RuleMsg, err error, relationType string)
    }
    
    1
    2
    3
    4
    5
    1. 注册规则引擎执行结束回调函数持久化msg以及相关状态(如果需要):WithOnEnd。
    ruleEngine.OnMsg(msg, types.WithOnEnd(func(ctx types.RuleContext, msg types.RuleMsg, err error, relationType string) {
      //持久化当前中断节点数据
      //ctx.GetSelfId() 当前节点ID,用于恢复
      //msg.Id本次执行实例消息ID
      //msg.Data本次执行实例消息数据
      //msg.Type本次执行实例消息类型
      //msg.Metadata本次执行实例消息元数据
      //err.Error()本次执行实例错误信息
      //relationType查找下一个节点的关系
    }))
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1. 恢复执行,提供上次中断保存的msg、中断节点ID,以及指定relationType查询下一个节点恢复执行。
    ruleEngine.OnMsg(msg, types.WithTellNext(fromNodeId string, relationTypes ...string))
    
    1
    在 GitHub 上编辑此页 (opens new window)
    上次更新: 2025/04/02, 01:29:50
    MCP-Server-Endpoint
    FAQ

    ← MCP-Server-Endpoint FAQ→

    Theme by Vdoing | Copyright © 2023-2025 RuleGo Team | Apache 2.0 License

    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式