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 描述连接关系)。配置简洁,关系清晰

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

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

# c1.yml
id: "c1"
layout:
- { type: "start"}
- { task: ""}
- { type: "end"}

2、表达式与脚本自由

# 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)为视图编辑提供配置支持

# 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"}

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

@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、事件广播与回调支持

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

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)

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

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);

流程配置样例:

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"}

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

Solon Flow v3.4.0 轻量级流程编排框架的更多相关文章

  1. DTcmsV4.0分析学习——(2)系统框架

    2.1物理结构 共8个项目,Web为启动项 项目间相互依赖关系图: 2.2逻辑结构 DTcms V4.0轻量级CMS系统框架采用的是典型的三层架构(项目与三层架构并非直接对应关系,至于什么是三层架构这 ...

  2. kubeSphere v3.3.0+kubernetes v1.22.10 集群部署

    概述 KubeSphere 是 GitHub 上的一个开源项目,是成千上万名社区用户的聚集地.很多用户都在使用 KubeSphere 运行工作负载.对于在 Linux 上的安装,KubeSphere ...

  3. 基于netty http协议栈的轻量级流程控制组件的实现

    今儿个是冬至,所谓“冬大过年”,公司也应景五点钟就放大伙儿回家吃饺子喝羊肉汤了,而我本着极高的职业素养依然坚持留在公司(实则因为没饺子吃没羊肉汤喝,只能呆公司吃食堂……).趁着这一个多小时的时间,想跟 ...

  4. 开源敏捷测试管理& 开源BUG跟踪管理软件itest(爱测试) V3.3.0隆重发布

    v3.3.0 下载地址 :itest下载 码云源码地址 https://gitee.com/itestwork/itest 开源中国  itest项目地址   https://www.oschina. ...

  5. 流程编排、如此简单-通用流程编排组件JDEasyFlow介绍

    作者:李玉亮 JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,适用于服务编排.工作流.审批流等场景,该组件已开源(https://github.com/JDEasyFlow/jd-ea ...

  6. FineUI(专业版)v3.2.0 发布(ASP.NET UI控件库)!

    +2016-08-20 v3.2.0 +表格增强. +表格列RenderField增加属性ClientHtmlEncode,用于在客户端进行HTML编码. -增加示例:单元格编辑->杂项-> ...

  7. STM32启动文件详细解析(V3.5.0) 以:startup_stm32f10x_hd.s为例

    我用的是IAR,这个貌似是MDK的,不过很有用,大家可以看一下 ;* 文件名 : startup_stm32f10x_hd.s ;* 库版本 : V3.5.0 ;* 说明: 此文件为STM32F10x ...

  8. Bootstrap(v3.2.0)模态框(modal)垂直居中

    Bootstrap(v3.2.0)模态框(modal)垂直居中方法: 在bootstrap.js文件900行后面添加如下代码,便可以实现垂直居中. that.$element.children().e ...

  9. Win10《芒果TV》商店版更新v3.4.0:率先支持创意者画中画,工作娱乐两不误

    在Win10创新者更新中,微软为Windows10 PC系统添加了UWP应用窗口置顶功能(亦称画中画功能),Win10版<芒果TV>更新v3.4.0,率先宣布支持画中画新特性,为广大用户带 ...

  10. Luminar 3 for Mac(照片编辑工具)v3.1.0中文特别版

    Luminar for Mac是一款多功能照片编辑软件,使用独特的AI工具加快速度,具备AI Sky Enhancer.Accent AI.太阳光线等创新功能.当然也保留了原有的功能,帮助你轻松的修复 ...

随机推荐

  1. github仓库的README文件在线预览视频

    1. 新建一个 issue ,在 issue 里面上传 mp4 视频文件(有限制,不能超过10MB) 上传超过10MB的视频会提示报错 2. 拿到视频文件的上传地址 3. 将这个地址直接贴到 READ ...

  2. 关于navicat导出和导入sql文件的方法

    导出SQL文件 导入SQL文件 导出技巧 导出SQL文件 到处数据库的方法很简单,只需要在要到处的数据库上面右键,选择转储SQL文件,可以选结构和数据...或者结构... 导入SQL文件 导如SQL文 ...

  3. 【经验】C++|在MFC子线程中,通过正确的传参,访问主线程对话框程序的控件对象、调用类函数

    引言 MFC中子线程操控窗口的控件的难点在于: 子线程函数不属于窗口类. 比方说, 窗口类CMFCApplication3Dlg的点击事件函数如下: void CMFCApplication3Dlg: ...

  4. 数据库问题之“字符编码问题 Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x81\xE7\x88...' for column 'product_name' at row 41”

    1)表1和表2的产品名称[数据库字段]字符编译方式不一致 ①问题 org.springframework.jdbc.UncategorizedSQLException: Error updating ...

  5. openstack-Train部署文档

    部署参考资料:1,环境准备https://blog.csdn.net/m0_61777116/article/details/123702147阿里yum源https://blog.csdn.net/ ...

  6. Scroll滚动,你玩明白了嘛?

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  7. LLM主要架构

    LLM本身基于Transformer架构 自2017年,Attention is all you need诞生起,原始的Transformer模型不同领域的模型提供了灵感和启发 基于原始的Transf ...

  8. No grammar constraints (DTD or XML schema) detected for the document

    warning: No grammar constraints (DTD or XML schema) detected for the document 未检测到文档的语法约束(DTD或XML模式) ...

  9. Java并发基础之多线程

    文章也发布在我的个人博客上:https://blog.ysboke.cn/archives/129.html 概述 每个Thread类的示例都代表一个线程,而进程是操作系统级别的多任务,JVM就是运行 ...

  10. ActiveMQ消息投递方式+死信队列

    死信队列 死信队列(Dead Letter Queue,DLQ),用来保存处理失败或者过期的信息.出现以下情况的时候,消息会被重发: 在一个事务session中调用了session.rollback( ...