【问题标题】:Corda Transaction is not progressing when a node is down当节点关闭时,Corda 事务没有进行
【发布时间】:2020-03-16 21:45:54
【问题描述】:

区块链者,

我已经使用 Corda (4) 开源作为 Ledger 平台和使用 Springboot 开发的中间件编写了一个区块链应用程序。

我面临的问题是当 Corda 网络中的一个节点关闭时,我的交易没有进行。在中间件层中,我从 Corda 网络中的 Network Map 动态获取节点(Notary 和 Self 节点除外)。我故意关闭网络中的一个节点。我没有看到网络地图中提供的任何功能可以确定 Corda 网络中节点的状态。现在,由于一个节点关闭,传递到停止节点的消息永远不会得到确认。因此,我的交易并没有超出这个节点,它只是卡住了。

当我再次启动我的节点时,从停止的节点中挑选事务传播并提交到相应的节点分类帐。

有没有办法我可以从中间件层 ping 一个节点并确定它的可用性以停止流执行?

另外,有没有一种方法可以创建已停止节点的副本以实现 Corda 节点的高可用性?

【问题讨论】:

    标签: corda


    【解决方案1】:

    我没有看到网络地图中提供的任何功能可以确定 corda 网络中节点的状态

    没错,网络地图应该用作发现服务,以查找连接到网络中其他节点所需的信息(请参阅NodeInfo 类)。它不包含有关这些节点的运行状况或可用性的任何信息。这可以通过尝试联系节点来确定。

    当我再次启动我的节点时,从停止的节点中挑选事务传播并提交到相应的节点分类帐。

    这是意料之中的,因为流框架的设计方式允许流对节点的瞬时故障/中断具有弹性。当对方节点可用并且流程将继续进行时,作为流程的一部分由节点缓冲的消息保证最终被传递。

    有没有办法我可以从中间件层 ping 一个节点并确定它的可用性以停止流执行?

    目前没有用于检查交易对手节点的运行状况/可用性的本机功能。但是,您可以尝试交换一对消息或尝试 p2p 连接。请参阅答案on this question 了解如何实现。还有一个 API 允许终止流,请参阅 CordaRPCOps 中的 killFlow 方法。但是,使用此 API 时需要格外小心,因为如果在错误的位置(例如在最终确定期间)终止流,可能会产生不一致的账本视图。

    另外,有没有一种方法可以创建停止节点的副本以实现 Corda 节点的高可用性?

    是的,作为 Corda Enterprise 的一部分,有多种高可用性设置。根据您的描述,我相信您正在寻找的是冷热部署,有关详细信息,请参阅this documentation

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2019-07-20
    相关资源
    最近更新 更多