使用Corda RPC客户端启动多个未跟踪的流

时间:2018-09-25 22:57:31

标签: corda

在以批处理方式加载数据的应用程序中,Corda如何在没有跟踪或可观察到的情况下并行触发许多流?

在RPC客户端上,只有两种方法(startFlowDynamic和startTrackedFlowDynamic)https://docs.corda.net/api/kotlin/corda/net.corda.core.messaging/-corda-r-p-c-ops/index.html

目标是避免不必要的开销并并行运行许多流。使用跟踪流时,Corda会发出有关未使用的侦听器的警告:https://github.com/corda/corda/blob/release-V3.2/client/rpc/src/main/kotlin/net/corda/client/rpc/internal/RPCClientProxyHandler.kt#L143

1 个答案:

答案 0 :(得分:2)

正在发生使用startTrackedFlowDynamic时出现的警告,因为它返回了几个未使用的Observable。如警告所述,您将需要先手动关闭未使用的那些,然后订阅它们,或者使用辅助方法net.corda.client.rpc.UtilsKt#notUsed

关于并行运行多个流的考虑,您可以执行以下操作:

FlowHandle<Result> flowHandle1 = rpcProxy.startFlowDynamic(ExampleFlow.class, *flow parameters 1*);
FlowHandle<Result> flowHandle2 = rpcProxy.startFlowDynamic(ExampleFlow.class, *flow parameters 2*);
FlowHandle<Result> flowHandle3 = rpcProxy.startFlowDynamic(ExampleFlow.class, *flow parameters 3*);

然后,您可以依次依次等待每个结果Future对象,以等待所有对象完成:

Arrays.asList(flowHandle1, flowHandle2, flowHandle3).forEach(handle -> {
  handle.getReturnValue().get();
});