Solon v3.2.0

flow - 基础接口参考

</> markdown

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

1、 流引擎(FlowEngine)

返回数据类型描述
FlowEngine.newInstance()FlowEngine实例化引擎
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) 执行链节点

主要扩展接口有:

  • StatefulFlowEngine(有状态的流引擎)

主要实现有:

  • FlowEngineDefault(用于支持无状态流)
  • StatefulFlowEngineDefault(用于支持有状态流)

2、流上下文接口(FlowContext)

返回数据类型描述
::new() 构造函数
::new(instanceId) 带实例id的,构造函数
getInstanceId() 实例id(一般用于有状态流)
isInterrupted()bool是否已阻断
interrupt() 阻断(当前分支不再前进)
interrupt(bool) 阻断或重置阻断
isStopped()bool是否已停止
stop() 停止(整个流不再前进)
run(script) 运行脚本
manualNext(node) 手动下一步(一般用于异步任务,需要 interrupt 配置)
eventBus()DamiBus<C, R>当前实例事件总线
engine()FlowEngine当前实例所用引擎(驱动定制时,用于跨链调用)
counter()Counter当前实例计数器(用于内部计数)
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没有时完成参数
backup() 备份参数
recovery() 恢复备份时的参数
resultObject执行结果(执行中可赋值)
getResult()Object获取执行结果
setResult(result) 设置执行结果(有些脚本引擎需要属性模式支持)

条件或脚本任务应用时:

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

instanceId(实例Id) 的作用:

  • 对 FlowEngine 没直接作用。如果有需求,可用作日志记录
  • 对 StatefulFlowEngine 有特定作用,通过识别是否有状态需求(空表示,不需要状态管理)

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

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

主要实现有:

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