v3.5.0 solon-flow 更新与兼容说明
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) |