交易透過流程(Flow)傳遞及處理,會經過幾個階段,完成交易的執行。
流程分為 2 種:
流程中為了增強整體的容錯性,避免機器故障造成的交易失敗,提供了暫停(Suspended)機制作為檢查點(Check-pointed)。
流程定義:
abstract class FlowLogic<out T>
@Suspendable
@Throws(FlowException::class)
abstract fun call(): T
open fun <R> subFlow
(
subLogic: FlowLogic<R>
,shareParentSessions: Boolean = false
):R
節點的主要服務,提供節點資訊,同時也作為流程傳遞的接口。
PluginServiceHub
流程傳遞處裡的 ServiceHub 實體(Instance)
object ExampleService
{
class Service(services: PluginServiceHub)
{
init
{
services.registerFlowInitiator(ExampleFlow.Initiator::class)
{
ExampleFlow.Acceptor(it)
}
}
}
}
流程處理(Handle)定義:
@RPCReturnsObservables
fun<T:Any> startFlowDynamic
(logicType:Class<out FlowLogic<T>>,vararg args:Any?):FlowHandle<T>
執行流程:
ExampleFlowLogic.call()
ProgressTracker:進度追蹤,用以查詢流程執行的階段及狀態。
open val progressTracker: ProgressTracker? = null
class ProgressTracker(vararg steps: Step)
open class Step(open val label: String)
progressTracker.currentStep = myStep
FlowException:用以處理流程(Flow)執行發生錯誤的情況
open class FlowException @JvmOverloads
constructor(message: String? = null, cause: Throwable? = null)
:Exception(message, cause)