当前位置: 首页 > 知识库问答 >
问题:

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

龙承德
2023-03-14

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

我的问题是,如何在X TIME后自动超时流。或者,我该如何从 CordApp 终止流?

我尝试过的事情是:

    < li >从RPCOps中终止流-没有用,因为我想从Cordapp中删除它 < li >从shell中杀死流-没有用,因为我想在某些情况下在代码中删除它 < li >使流从TimedFlow继承并相应地设置参数——文档说这实际上不会终止流,而只是重新启动它。

共有1个答案

乜昆
2023-03-14

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

更具体地说,关于流的终止。在您的案例中,响应程序流似乎有一些问题,因此导致启动流永远等待永远不会到来的响应。这是正常行为。由于流是从Initiating流启动的,因此您需要终止该流,因此无法从Initialing流终止Responder流(这就是您在这个问题中要问的)。

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

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

 类似资料:
  • 问题内容: 我需要创建一个库,其中将包含同步和异步方法。 -等到得到结果,然后返回结果。 -立即返回Future,如果需要,可以在完成其他操作后进行处理。 我图书馆的核心逻辑 客户将使用我们的库,他们将通过传递构建器对象来调用它。然后,我们将使用该对象构造一个URL,并通过执行该URL对该URL进行HTTP客户端调用,然后将响应作为JSON字符串返回给我们,然后通过创建对象将该JSON字符串发送回

  • 我有一个正在运行的Spark应用程序,它占据了所有核心,而我的其他应用程序将不会被分配任何资源。 我做了一些快速的研究,人们建议使用YARN kill或 /bin/spark-class来杀死命令。然而,我使用的是CDH版本, /bin/spark-class根本不存在,YARN kill应用程序也不起作用。 有人能和我一起吗?

  • 问题内容: 有没有办法过早中止交易?说,我已经向数据库发送了一个命令,该命令运行五分钟,四分钟后,我想中止它。 JDBC是否定义了一种向数据库发送“停止此连接上正在执行的操作”信号的方法? 问题答案: 如james所提到的,Statement.cancel()将取消正在运行的Statement的执行(选择,更新等)。JDBC文档特别指出,Statement.cancel()可安全地从另一个线程运行

  • 本文向大家介绍C语言如何正确的终止正在运行的子线程,包括了C语言如何正确的终止正在运行的子线程的使用技巧和注意事项,需要的朋友参考一下 最近开发一些东西,线程数非常之多,当用户输入Ctrl+C的情形下,默认的信号处理会把程序退出,这时有可能会有很多线程的资源没有得到很好的释放,造成了内存泄露等等诸如此类的问题,本文就是围绕着这么一个使用场景讨论如何正确的终止正在运行的子线程。其实本文更确切的说是解

  • 问题内容: 我有一个Jenkinsfile或Jenkins管道,该管道创建一个新图像并从该图像中启动一个容器。第一次运作良好。但是在随后的运行中,我希望停止并删除先前的容器。我的Jenkinsfile如下: “ docker stop container”阶段失败。那是因为我不知道获取容器并停止它的正确API。谢谢。 问题答案: 就像在此Jenkinsfile中一样,您可以改用命令。 这样,您可以

  • 我写了一个程序在IDLE令牌化文本文件,它开始令牌349文本文件!我怎样才能阻止它?如何停止正在运行的Python程序?