v3.8.1 solon-flow 更新与兼容说明
2026年1月2日 下午6:45:32
3.8.1 更新与兼容说明(预告)
- 添加
solon-flowFlowContext:toJson,fromJson 序列化方法(方便持久化和恢复) - 添加
solon-flowNodeTrace 类 - 添加
solon-flowNodeSpec.then 方法 - 添加
solon-flowFlowContext.with 方法(强调方法域内的变量) - 添加
solon-flowFlowContext.containsKey 方法 - 添加
solon-flowFlowContext.isStopped 方法(用于外部检测) - 添加
solon-flowNamedTaskComponent 接口,方便智能体开发 - 优化
solon-flowFlowContext 接口设计,并增加持久化辅助方法 - 优化
solon-flowFlowContext.eventBus 内部实现改为字段模式 - 优化
solon-flowstart 类型节点改为自由流出像 activity 一样(只是没有任务) - 优化
solon-flow引擎的 onNodeEnd 执行时机(改为任务执行之后,连接流出之前) - 优化
solon-flow引擎的 onNodeStart 执行时机(改为任务执行之前,连接流入之后) - 优化
solon-flow在 onNodeEnd 时添加 FlowContext.lastNode 记录(跨流执行后再次恢复) - 优化
solon-flow引擎的 reverting 处理(支持跨引擎多图场景) - 优化
solon-flowNode,Link toString 处理(加 whenComponent) - 调整
solon-flowFlowContext:executor 转移到 FlowDriver - 调整
solon-flowFlowInterceptor:doIntercept 更名为 doFlowInterceptor,并标为 default(扩展时语义清晰,且不需要强制实现) - 移除
solon-flowFlowContext:incrAdd,incrGet 弃用预览接口 - 修复
solon-flowFlowContext 跨多引擎中转时 exchanger 的冲突问题
兼容变化对照表:
| 旧名称 | 新名称 | 备注 |
|---|---|---|
| FlowInterceptor:doIntercept | doFlowIntercept | 扩展时语义清晰 |
| FlowContext:executor | FlowDriver:getExecutor | 上下文不适合配置线程池 |
| FlowContext:incrAdd,incrGet | / | 移除 |
新特性预览:上下文序列化与持久化
//恢复上下文
FlowContext context = FlowContext.fromJson(json);
//从恢复上下文开始持行
flowEngine.eval(graphId, context.lastNodeId(), context);
//转为 json(方便持久化)
json = context.toJson();
3.8.0 更新与兼容说明
重要变化:
- 第六次预览
- 取消“有状态”、“无状态”概念。
- solon-flow 回归通用流程引擎(分离“有状态”的概念)。
- 新增 solon-flow-workflow 为工作流性质的封装(未来可能会有 dataflow 等)。
具体更新:
- 插件
solon-flow第六次预览 - 新增
solon-flow-workflow插件(替代 FlowStatefulService) - 添加
solon-flowFlowContext:lastNodeId() 方法(最后一个运行的节点Id) - 添加
solon-flowNode.getMetaAs, Link.getMetaAs 方法 - 添加
solon-flowNodeSpec:linkRemove 方法(增强修改能力) - 添加
solon-flowGraph:create(id,title,consumer) 方法 - 添加
solon-flowGraph:copy(graph,consumer) 方法(方便复制后修改) - 添加
solon-flowGraphSpec:getNode(id) 方法 - 添加
solon-flowGraphSpec:addLoop(id) 方法替代 addLooping(后者标为弃用) - 添加
solon-flowFlowEngine:eval(Graph, ..) 系列方法 - 优化
solon-flowFlowEngine:eval(Node startNode) 处理,改为从 root 开始恢复到 start 再开始执行(恢复过程中,不会执行任务) - 调整
solon-flow移除 Activity 节点预览属性 "$imode" 和 "$omode" - 调整
solon-flowActivity 节点流出改为自由模式(可以多线流出:无条件直接流出,有条件检测后流出) - 调整
solon-flowNode.getMeta 方法返回改为 Object 类型(并新增 getMetaAs) - 调整
solon-flowEvaluation:runTest 改为 runCondition - 调整
solon-flowFlowContext:incrAdd,incrGet 标为弃用(上下文数据为型只能由输入侧决定) - 调整
solon-flowCondition 更名为 ConditionDesc - 调整
solon-flowTask 更名为 ConditionDesc - 调整
solon-flowXxxDecl 命名风格改为 XxxSpec - 调整
solon-flowGraphDecl.parseByXxx 命名风格改为 GraphSpec.fromXxx - 调整
solon-flowGraph.parseByXxx 命名风格改为 Graph.fromXxx
兼容变化对照表:
| 旧名称 | 新名称 | 说明 |
|---|---|---|
GraphDecl | GraphSpec | 图定义 |
GraphDecl.parseByXxx | GraphSpec.fromXxx | 图定义加载 |
Graph.parseByXxx | Graph.fromXxx | 图加载 |
LinkDecl | LinkSpec | 连接定义 |
NodeDecl | NodeSpec | 节点定义 |
Condition | ConditionDesc | 条件描述 |
Task | TaskDesc | 任务描述(避免与 workflow 的概念冲突) |
FlowStatefulService | WorkflowService | 工作流服务 |
StatefulTask | Task | 任务 |
Operation | TaskAction | 任动工作 |
TaskType | TaskState | 任务状态 |
FlowStatefulService 到 WorkflowService 的接口变化对照表:
| 旧名称 | 新名称 | 说明 |
|---|---|---|
postOperation(..) | postTask(..) | 提交任务 |
postOperationIfWaiting(..) | postTaskIfWaiting(..) | 提交任务 |
evel(..) | / | 执行 |
stepForward(..) | / | 单步前进 |
stepBack(..) | / | 单步后退 |
| / | getState(..) | 获取状态 |
新特性预览:Graph 硬编码方式(及修改能力增强)
//硬编码
Graph graph = Graph.create("demo1", "示例", spec -> {
spec.addStart("start").title("开始").linkAdd("01");
spec.addActivity("n1").task("@AaMetaProcessCom").linkAdd("end");
spec.addEnd("end").title("结束");
});
//修改
Graph graphNew = Graph.copy(graph, spec -> {
spec.getNode("n1").linkRemove("end").linkAdd("n2"); //移掉 n1 连接;改为 n2 连接
spec.addActivity("n2").linkAdd("end");
});
新特性预览:FlowContext:lastNodeId (计算的中断与恢复)。参考:https://solon.noear.org/article/1246
flowEngine.eval(graph, context.lastNodeId(), context);
//...(从上一个节点开始执行)
flowEngine.eval(graph, context.lastNodeId(), context);
新特性预览:WorkflowService(替代 FlowStatefulService)
WorkflowService workflow = WorkflowService.of(engine, WorkflowDriver.builder()
.stateController(new ActorStateController())
.stateRepository(new InMemoryStateRepository())
.build());
//1. 取出任务
Task task = workflow.getTask(graph, context);
//2. 提交任务
workflow.postTask(task.getNode(), TaskAction.FORWARD, context);
3.7.3 更新与兼容说明
- 插件
solon-flow第五次预览 - 添加
solon-flowNode:task 硬编码能力(直接设置 TaskComponent),方便全动态场景 - 添加
solon-flowNode:when 硬编码能力(直接设置 ConditionComponent),方便全动态场景 - 添加
solon-flowLink:when 硬编码能力(直接设置 ConditionComponent),方便全动态场景 - 添加
solon-flowStateResult ,在计算方面比 StatefulTask 更适合语义 - 添加
solon-flowFlowContext:stop(),interrupt() 方法 - 添加
solon-flowGraph 快捷创建方法 - 添加
solon-flowFlowStatefulService:eval 方法 - 调整
solon-flow“链”概念改为“图”(更符合实际结构) - 调整
solon-flowChain 更名为 Graph,ChainDecl 更名为 GraphDecl - 调整
solon-flowChainInterceptor,ChainInvocation 更名为 FlowInterceptor,FlowInvocation - 调整
solon-flow包容网关逻辑,分支空条件为 true,且取消默认概念(之前为:空条件为 false ,且为默认)
solon-flow 兼容说明:
现有应用如果没有用 ChainDecl 动态构建,不会受影响。。。如果有?需要换个类名。
solon-flow 硬编码更简便:
Graph graph = Graph.create("demo1", decl -> {
decl.addActivity("n1").task(new Draft()).linkAdd("n2");
decl.addActivity("n2").task(new Review()).linkAdd("n3");
decl.addActivity("n3").task(new Confirm());
});
v3.7.2 更新说明
- dami2 升为 2.0.4
v3.6.1 更新说明
- 添加
solon-flowFlowEngine:forStateful,statefulService 标为弃用 - 调整
solon-flow增加loop类型替代iterator(iterator 增加弃用提醒),并提供更多功能 - 调整
solon-flow所有网关节点增加task支持,不再需要$imode和$omode。更适合前端连线控制 - 调整
solon-flow节点属性$imode和$omode标为弃用
{type: 'loop',meta: {'$for': 'item','$in': [1,3,4]}}
v3.6.0 更新说明
- dami 升为 2.0.0
- 添加 solon-flow Node:getMetaAsString, getMetaAsNumber, getMetaAsBool 方法
v3.5.0 更新与兼容说明
本次更新,主要统一了“无状态”、“有状态”流程的基础:引擎、驱动。通过上下文来识别是否为有状态及相关支持。
FlowContext 改为接口,增加了两个重要的方法:
boolean isStateful();
StatefulSupporter statefulSupporter();
且,FlowContext 做了分离。解决了,之前在实例范围内不可复用的问题。
兼容说明
- stateful 相关概念与接口有调整
- FlowContext 改为接口,并移除 result 字段(所有数据基于 model 交换)
- FlowContext 内置实现分为:StatelessFlowContext 和 StatefulFlowContext。通过
FlowContext.of(...)实例化。(也可按需定制) - StateRepository 接口的方法命名调整,与 StatefulSupporter 保持一致性
升级请做好调整与测试。
具体更新
- 添加 solon-flow FlowDriver:postHandleTask 方法
- 添加 solon-flow FlowContext:exchanger 方法(可获取 FlowExchanger 实例)
- 调整 solon-flow FlowContext 拆分为:FlowContext(对外) 和 FlowExchanger(对内)
- 调整 solon-flow FlowContext 移除 result 字段(所有数据基于 model 交换)
- 调整 solon-flow FlowContext get 改为返回 Object(之前为 T),新增 getAs 返回 T(解决 get 不能直接打印的问题)
- 调整 solon-flow 移除 StatefulSimpleFlowDriver 功能合并到 SimpleFlowDriver(简化)
- 调整 solon-flow 新增 stateless 包,明确 “有状态” 与 “无状态” 这两个概念(StatelessFlowContext 和 StatefulFlowContext)
- 调整 solon-flow FlowStatefulService 接口,每个方法的 context 参数移到最后位(保持一致性)
- 调整 solon-flow 新增 StatefulSupporter 接口,方便 FlowContext 完整的状态控制
- 调整 solon-flow StateRepository 接口的方法命名,与 StatefulSupporter 保持一致性
- 调整 solon-flow Chain 拆分为:Chain 和 ChainDecl
两对拆分类的定位:
- FlowContext 侧重对外,可复用(用于传参、策略,状态)
- FlowExchanger 侧重对内,不可复用(用于控制、中间临时状态或变量)
- Chain 为运行态(不可修改)
- ChainDecl 为声明或配置态(可以随时修改)
应用示例:
//FlowContext 构建
FlowContext context = FlowContext.of(); //无状态的
FlowContext context = FlowContext.of("1", stateController); //有状态控制的
FlowContext context = FlowContext.of("1", stateController, stateRepository); //有状态控制的和状态持久化的
//Chain 手动声明
Chain chain = new ChainDecl("d3", "风控计算").create(decl->{
decl.addNode(NodeDecl.startOf("s").linkAdd("n2"));
decl.addNode(NodeDecl.activityOf("n1").title("基本信息评分").linkAdd("g1").task("@base_score"));
decl.addNode(NodeDecl.exclusiveOf("g1").title("分流")
.linkAdd("e", l -> l.title("优质用户(评分90以上)").condition("score > 90"))
.linkAdd("n2", l -> l.title("普通用户")) //没条件时,做为默认
);
decl.addNode(NodeDecl.activityOf("n2").title("电商消费评分").linkAdd("n3").task("@ec_score"));
decl.addNode(NodeDecl.activityOf("n3").title("黑名单检测").linkAdd("e").task("@bl_score"));
decl.addNode(NodeDecl.endOf("e").task("."));
});
v3.4.3 更新说明
- 新增 solon-flow iterator 循环网关(
$for,$in) - 新增 solon-flow activity 节点流入流出模式(
$imode,$omode),且于二次定制开发 - 添加 solon-flow ChainInterceptor:onNodeStart, onNodeEnd 方法(扩展拦截的能力)
- 添加 solon-flow 操作:Operation.BACK_JUMP, FORWARD_JUMP
v3.4.1 更新说明
- 添加 solon-flow FlowContext:incrGet, incrAdd
- 添加 solon-flow aot 配置
- 优化 solon-flow Chain:parseByDom 节点解析后的添加顺序
- 优化 solon-flow Chain 解析统改为 Yaml 处理,并添加 toYaml 方法
- 优化 solon-flow Chain:toJson 输出(压缩大小,去掉空输出)
v3.4.0 更新与兼容说明
兼容说明
- solon-flow stateful 相关概念与接口有调整
具体更新
- 调整 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) |