Solon v3.4.2

flow - 流程引擎接口参考

</> markdown

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

1、 流程引擎(FlowEngine)

返回数据类型描述
FlowEngine.newInstance()FlowEngine实例化引擎
FlowEngine.newInstance(driver)FlowEngine实例化引擎(指定默认驱动器)
getDriver(chain)->FlowDriver 获取链的驱动器
getDriverAs(chain, driverClass)->FlowDriver 获取链的驱动器(带类型检测)
statefulService()->FlowStatefulService 获取状态服务(v3.4.0 后支持)
addInterceptor(interceptor, index) 添加拦截器
register(name, driver) 注册驱动器
register(driver) 注册默认驱动器
unregister(name) 注销链驱动器
load(chainUri) 加载链(支持 * 号表达式批量加载)
load(chain) 加载链
unload(chainId) 卸载链
getChains()Collection<Chain>获取所有链
getChain(chainId)Chain获取链
eval(chainId) 执行链
eval(chainId, context) 执行链
eval(chainId, startId, context) 执行链
eval(chainId, startId, depth, context) 执行链
eval(chain) 执行链
eval(chain, context) 执行链
eval(startNode) 执行链节点
eval(startNode, context) 执行链节点
eval(startNode, depth, context) 执行链节点

主要实现有:

  • FlowEngineDefault(默认实现)

2、流上下文接口(FlowContext)

返回数据类型描述
::new() 构造函数
::new(instanceId) 带实例id的,构造函数
getInstanceId() 实例id(一般用于有状态流)
isInterrupted()bool是否已阻断
interrupt() 阻断(当前分支不再前进)
interrupt(bool) 阻断或重置阻断
isStopped()bool是否已停止
stop() 停止(整个流不再前进)
runTask(node, description) 运行动态任务描述(与配置格式保持一致)
runScript(script) 运行动态脚本
eventBus()DamiBus<C, R>当前实例事件总线
engine()FlowEngine当前实例所用引擎(驱动定制时,用于跨链调用)
model()Map参数集合
put(key, value)self推入参数
putIfAbsent(key, value)self没有时推入参数
putAll(model)self推入参数集合
get(key)T获取参数
getOrDefault(key, def)T获取参数或默认
remove(key)T移除参数
computeIfAbsent(key, mappingFunction)T没有时完成参数
incrGet(key)int增量获取
incrAdd(key, delta)int增量添加
backup() 备份参数
recovery() 恢复备份时的参数
resultObject执行结果(执行中可赋值)
getResult()Object获取执行结果
setResult(result) 设置执行结果(有些脚本引擎需要属性模式支持)

条件或脚本任务应用时:

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

instanceId(实例Id) 的作用:

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

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

返回数据类型描述
onNodeStart(context, node) 节点开始时
onNodeEnd(context, node) 节点结束时
handleTest(context, condition)bool处理条件检测
handleTask(context, task) 处理执行任务

主要实现有:

  • SimpleFlowDriver(用于支持无状态流程)
  • StatefulSimpleFlowDriverr(用于支持有状态流程)