如何通过 RPC 检查流的当前状态?
How can I check the current state of a flow by RPC?
我在FlowLogic
class里面找到了一个方法recordAuditEvent(...)
,但是我不明白怎么用,也不知道对什么有用这个用例。
recordAuditEvent
仅供内部使用。
您可以使用 CordaRPCOps.startTrackedFlowDynamic
跟踪流程的进度。这个函数 returns 一个 FlowHandle
有一个 progress
属性。 progress
是一个 Observable
,它为流程中的每个进度跟踪器步骤发出一个事件。您可以按如下方式使用它:
val flowHandle = proxy.startTrackedFlowDynamic(MyFlow::class.java, arg1, arg2, ...)
flowHandle.progress.subscribe { progressTrackerLabel ->
// Log the progress tracker label.
}
您还可以通过 FlowHandle
的 id
属性 获取流的唯一 运行 ID。您可以使用此 ID 检查流是否仍在进行中,方法是检查它是否仍存在于当前状态机(即流)列表中:
val flowInProgress = flowHandle.id in cordaRPCOps.stateMachinesSnapshot().map { it.id }
您还可以监控状态机管理器等待流程完成,然后检查是否成功并获取结果:
val flowUpdates = cordaRPCOps.stateMachinesFeed().updates
flowUpdates.subscribe {
if (it.id == flowHandle.id && it is StateMachineUpdate.Removed) {
val int = it.result.getOrThrow()
// Handle result.
}
}
我在FlowLogic
class里面找到了一个方法recordAuditEvent(...)
,但是我不明白怎么用,也不知道对什么有用这个用例。
recordAuditEvent
仅供内部使用。
您可以使用 CordaRPCOps.startTrackedFlowDynamic
跟踪流程的进度。这个函数 returns 一个 FlowHandle
有一个 progress
属性。 progress
是一个 Observable
,它为流程中的每个进度跟踪器步骤发出一个事件。您可以按如下方式使用它:
val flowHandle = proxy.startTrackedFlowDynamic(MyFlow::class.java, arg1, arg2, ...)
flowHandle.progress.subscribe { progressTrackerLabel ->
// Log the progress tracker label.
}
您还可以通过 FlowHandle
的 id
属性 获取流的唯一 运行 ID。您可以使用此 ID 检查流是否仍在进行中,方法是检查它是否仍存在于当前状态机(即流)列表中:
val flowInProgress = flowHandle.id in cordaRPCOps.stateMachinesSnapshot().map { it.id }
您还可以监控状态机管理器等待流程完成,然后检查是否成功并获取结果:
val flowUpdates = cordaRPCOps.stateMachinesFeed().updates
flowUpdates.subscribe {
if (it.id == flowHandle.id && it is StateMachineUpdate.Removed) {
val int = it.result.getOrThrow()
// Handle result.
}
}