Solon v3.7.3

flow - 流程引擎接口参考

</> markdown
2025年12月5日 上午10:05:10

图的流动由“流程引擎”驱动的,也称为:执行。“流程引擎”在执行图时,会涉及到“上下文”(提供执行时的上下文参数与对象引用),以及可以定制的“流程驱动器”。

1、 流程引擎(FlowEngine)

返回数据类型描述
FlowEngine.newInstance()FlowEngine实例化引擎
FlowEngine.newInstance(driver)FlowEngine实例化引擎(指定默认驱动器)
getDriver(graph)->FlowDriver 获取图的驱动器
getDriverAs(graph, driverClass)->FlowDriver 获取图的驱动器(带类型检测)
forStateful()->FlowStatefulService 获取状态服务
statefulService()->FlowStatefulService 获取状态服务 [弃用] (v3.6.1 后由 forStateful 替代)
addInterceptor(interceptor, index) 添加拦截器
register(name, driver) 注册驱动器
register(driver) 注册默认驱动器
unregister(name) 注销图驱动器
load(graphUri) 加载图(支持 * 号表达式批量加载)
load(graph) 加载图
unload(graphId) 卸载图
getGraphs()Collection<Graph>获取所有图
getGraph(graphId)Graph获取图
eval(graphId) 执行图
eval(graphId, context) 执行图
eval(graphId, startId, context) 执行图
eval(graphId, startId, depth, context) 执行图
eval(graph) 执行图
eval(graph, context) 执行图
eval(startNode) 执行节点
eval(startNode, context) 执行节点
eval(startNode, depth, context) 执行节点
eval(startNode, depth, exchanger) 执行节点

主要实现有:

  • FlowEngineDefault(默认实现)

2、流上下文接口(FlowContext)

返回数据类型描述
+of() 获取无状态上下文实例
+of(instanceId) 获取无状态上下文实例
+of(instanceId, stateController, stateRepository) 获取有状态上下文实例
+of(instanceId, stateController) 获取有状态上下文实例
getInstanceId() 实例id(一般用于有状态流)
executor() 异步执行器
executor(executor) 配置异步执行器(配置后,并行网关将多线程执行)
exchanger() 交换器(主要内部使用)
interrupt() 中断(当前分支不再前进)
stop() 停止并返回(整个流不再前进)
eventBus()DamiBus<C, R>当前实例事件总线
model()Map参数集合
put(key, value)self推入参数
putIfAbsent(key, value)self没有时推入参数
putAll(model)self推入参数集合
get(key)Object获取参数
getAs(key)T获取参数
getOrDefault(key, def)T获取参数或默认
remove(key)T移除参数
computeIfAbsent(key, mappingFunction)T没有时完成参数
incrGet(key)int增量获取
incrAdd(key, delta)int增量添加

条件或脚本任务应用时:

  • FlowContext 实例在脚本里的变量名为:context
  • 所有 model 里参数,会成为脚本里的变量(直接可用)

instanceId(实例Id) 的作用:

  • 用于识别是否有状态需求(空表示,不需要状态管理)

3、流程驱动器接口(FlowDriver),可自由定制

方法返回数据类型描述
onNodeStart(exchanger, node) 节点开始时
onNodeEnd(exchanger, node) 节点结束时
handleCondition(exchanger, condition)bool处理条件检测
handleTask(exchanger, task) 处理执行任务
postHandleTask(exchanger, task) 提交处理任务(有状态时,需要二次控制)

主要实现有:

  • SimpleFlowDriver(简单流程驱动器,同时支持无状态、有状态两种场景)