如何从Corda的CordApp中超时/终止正在运行的Flow



我在服务中实现了两个流(启动流和响应流(,每X分钟运行一次。它们同时使用发送和接收方法。当一个节点出现故障时,流会留在内存中,不会返回或引发异常。这变成了一个问题,因为一段时间后,节点将崩溃,因为同时运行的流太多。

我的问题是如何在X TIME之后自动暂停Flow。或者,我如何从CordApp终止Flow?

我尝试过的是:

  1. 从RPCOps中杀死流-没有用,因为我想从Cordap中删除它
  2. kill来自shell的flow-没有用,因为我想在特定条件下在代码中删除它
  3. 让Flow从TimedFlow继承并相应地设置参数-文档说这从来没有真正杀死Flow,只是重新启动它

您面临的根本问题是同时运行的流太多。如果您使用的是Corda Open Source v4.x,请记住它是单线程的,因此如果您需要并行运行多个流,则应切换到多线程的Corda Enterprise。

更具体地说是关于扼杀流量。在您的情况下,响应程序流似乎存在一些问题,因此导致启动流永远等待一个从未到达的响应。这是正常的行为。由于流是从启动流开始的,您需要终止它,您不能从启动流终止响应程序流(这就是您在这个问题中所问的(。

你想做的事情在理论上也是错误的。这意味着,在一个分布式网络中,启动流和响应流在属于两个不同组织的两个不同节点上运行,第一个节点可以控制另一个节点的操作。这不是DLT/区块链的工作方式,而是标准客户端/服务器体系结构中的正常工作方式。

终止启动流的唯一方法是从节点终端或使用CordaRPC的外部客户端。

最新更新