Solon Flow v3.4.0 轻量级流程编排框架

Solon Flow 是一个轻量级流程编排框架(采用 yaml 或 json 偏平式编排格式)

  • 支持无状态流程
    • 可用于计算(或任务)的编排场景
    • 可用于业务规则和决策处理型的编排场景
  • 支持有状态流程
    • 可用于办公审批型(有状态、可中断,人员参与)的编排场景
    • 可用于长时间流程(结合自动前进,等待介入)的编排场景

有可视化的设计器:

嵌入第三方框架的示例:

同时兼容 java8 ~ java24。也可嵌入到 SpringBoot、jFinal、Vert.x 等框架中使用。

一、最近更新了什么?

  • 调整 solon-flow stateful 相关概念(提交活动状态,改为提交操作)
  • 调整 solon-flow StateType 拆分为:StateType 和 Operation
  • 调整 solon-flow StatefulFlowEngine:postActivityState 更名为 postOperation
  • 调整 solon-flow StatefulFlowEngine:postActivityStateIfWaiting 更名为 postOperationIfWaiting
  • 调整 solon-flow StatefulFlowEngine:getActivity 更名为 getTask
  • 调整 solon-flow StatefulFlowEngine:getActivitys 更名为 getTasks
  • 调整 solon-flow StatefulFlowEngine 更名为 FlowStatefulService(确保引擎的单一性)
  • 添加 solon-flow FlowStatefulService 接口,替换 StatefulFlowEngine(确保引擎的单一性)
  • 添加 solon-flow FlowEngine:statefulService() 方法
  • 添加 solon-flow FlowEngine:getDriverAs() 方法

方法名称调整:

旧方法 新方法
getActivityNodes getTasks
getActivityNode getTask
postActivityStateIfWaiting postOperationIfWaiting
postActivityState postOperation

状态类型拆解后的对应关系(之前状态与操作混一起,不合理)

StateType(旧) StateType(新) Operation(新)
UNKNOWN(0) UNKNOWN(0) UNKNOWN(0)
WAITING(1001) WAITING(1001) BACK(1001)
COMPLETED(1002) COMPLETED(1002) FORWARD(1002)
TERMINATED(1003) TERMINATED(1003) TERMINATED(1003)
RETURNED(1004) BACK(1001)
RESTART(1005) RESTART(1004)

二、特色展示

1、采用 yaml 或 json 偏平式编排格式

偏平式编排,没有深度结构(所有节点平铺,使用 link 描述连接关系)。配置简洁,关系清晰

yaml 复制代码
# c1.yml
id: "c1"
layout: 
  - { id: "n1", type: "start", link: "n2"}
  - { id: "n2", type: "activity", link: "n3"}
  - { id: "n3", type: "end"}

还支持简化模式(能自动推断的,都会自动处理),具体参考相关说明

yaml 复制代码
# c1.yml
id: "c1"
layout: 
  - { type: "start"}
  - { task: ""}
  - { type: "end"}

2、表达式与脚本自由

yaml 复制代码
# c2.yml
id: "c2"
layout: 
  - { type: "start"}
  - { when: "order.getAmount() >= 100", task: "order.setScore(0);"}
  - { when: "order.getAmount() > 100 && order.getAmount() <= 500", task: "order.setScore(100);"}
  - { when: "order.getAmount() > 500 && order.getAmount() <= 1000", task: "order.setScore(500);"}
  - { type: "end"}

3、元数据配置,为扩展提供了无限空间

元数据主要有两个作用:(1)为任务运行提供配置支持(2)为视图编辑提供配置支持

yaml 复制代码
# c3.yml
id: "c3"
layout: 
  - { id: "n1", type: "start", link: "n2"}
  - { id: "n2", type: "activity", link: "n3", meta: {cc: "demo@noear.org"}, task: "@MetaProcessCom"}
  - { id: "n3", type: "end"}

通过组件方式,实现元数据的抄送配置效果

java 复制代码
@Component("MetaProcessCom")
public class MetaProcessCom implements TaskComponent {
    @Override
    public void run(FlowContext context, Node node) throws Throwable {
       String cc = node.getMeta("cc");
       if(Utils.isNotEmpty(cc)){
           //发送邮件...
       }
    }
}

4、事件广播与回调支持

广播(即只需要发送),回调(即发送后要求给答复)

yaml 复制代码
id: f4
layout:
  - task: |
      //只发送
      context.<String,String>eventBus().send("demo.topic", "hello");  //支持泛型(类型按需指定,不指定时为 object)
  - task: |
      //发送并要求响应(就是要给答复)
      String rst = context.<String,String>eventBus().sendAndRequest("demo.topic.get", "hello");
      System.out.println(rst);

5、支持无状态、有状态两种应用

支持丰富的应用场景:

  • 无状态流程
    • 可用于计算(或任务)的编排场景
    • 可用于业务规则和决策处理型的编排场景
  • 有状态流程
    • 可用于办公审批型(有状态、可中断,人员参与)的编排场景
    • 可用于长时间流程(结合自动前进,等待介入)的编排场景

自身也相当于一个低代码的运行引擎(单个配置文件,也可满足所有的执行需求)。

6、驱动定制(是像 JDBC 有 MySql, PostgreSQL,还可能有 Elasticsearch)

这是一个定制后的,支持基于有状态驱动的流程引擎效果(比如支持行政审批)。

java 复制代码
FlowEngine flowEngine = FlowEngine.newInstance(StatefulSimpleFlowDriver.builder()
                .stateOperator(new MetaStateOperator("actor"))
                .stateRepository(new InMemoryStateRepository())
                .build());
FlowStatefulService statefulService =  flowEngine.statefulService();
                
var context = new FlowContext("i1").put("actor", "陈鑫");

//获取上下文用户的任务
var task = statefulService.getTask("f1", context);

assert "step2".equals(task.getNode().getId());
assert StateType.UNKNOWN == task.getState(); //没有权限启动任务(因为没有配置操作员)

//提交操作
statefulService.postOperation(context, task.getNode(), Operation.COMPLETED);

流程配置样例:

yaml 复制代码
id: f1
layout:
  - {id: step1, title: "发起审批", type: "start"}
  - {id: step2, title: "抄送", meta: {cc: "吕方"}, task: "@OaMetaProcessCom"}
  - {id: step3, title: "审批", meta: {actor: "陈鑫", cc: "吕方"}, task: "@OaMetaProcessCom"}
  - {id: step4, title: "审批", type: "parallel", link: [step4_1, step4_2]}
  - {id: step4_1, meta: {actor: "陈宇"}, link: step4_end}
  - {id: step4_2, meta: {actor: "吕方"}, link: step4_end}
  - {id: step4_end, type: "parallel"}
  - {id: step5, title: "抄送", meta: {cc: "吕方"}, task: "@OaMetaProcessCom"}
  - {id: step6, title: "结束", type: "end"}

对于驱动器的定制,我们还可以:定制(或选择)不同的脚本执行器、组件容器实现等。

相关推荐
程序无bug2 分钟前
Restful Api接口对接Java后台返回实体格式封装JsonWrite
java·后端
天天摸鱼的java工程师7 分钟前
订单超时取消的五种解法:从普通商品到秒杀订单,业务不同方案不同!
java·后端·面试
SimonKing37 分钟前
Java 8 日期时间 API 全面指南:使用技巧与场景实践
java·后端·程序员
今天背单词了吗9801 小时前
算法学习笔记:25.回溯算法之迷宫寻路——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·学习·考研·算法·回溯算法
青云交1 小时前
Java 大视界 -- Java 大数据在智能交通智能公交站台乘客流量预测与服务优化中的应用(349)
java·大数据·java 大数据·智能公交·极端天气调度·车型适配·客流预测
物与我皆无尽也1 小时前
Agent交互细节
java·llm·agent·tools·mcp·mcp server
我爱吃菠 菜1 小时前
手撕设计模式之消息推送系统——桥接模式
java·设计模式·桥接模式
共享家95272 小时前
linux_线程同步
java·linux·服务器
不懂英语的程序猿2 小时前
【JEECG 组件扩展】JSwitch开关组件扩展单个多选框样式
java·前端·javascript·后端
hqxstudying2 小时前
Java行为型模式---命令模式
java·开发语言·后端·eclipse·命令模式