【问题标题】:Starting multiple untracked flows with the Corda RPC Client使用 Corda RPC 客户端启动多个未跟踪的流
【发布时间】:2018-09-27 17:11:35
【问题描述】:

在一个以批处理方式加载数据的应用程序中,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

【问题讨论】:

    标签: corda


    【解决方案1】:

    您在使用startTrackedFlowDynamic 时看到的警告正在发生,因为它返回了几个未使用的Observables。正如警告所说,您需要通过订阅然后订阅它们来手动关闭未使用的那些,或者使用帮助方法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();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2018-12-19
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多