Corda “中遇到错误”;session.sendAndReceiveWithRetry(tx)”会话;

Corda “中遇到错误”;session.sendAndReceiveWithRetry(tx)”会话;,corda,Corda,我们的应用程序目前使用Corda V2.0,并部署到专用服务器,我们使用3个公证人配置RAFT,但当事务存在输入状态时,在日志中发现以下错误 messaging.NodeMessagingClient.sendWithRetry - Reached the maximum number of retries (3) for message ClientMessageImpl 在阅读FinalityFlow的代码后,我们发现这个错误应该发生在NotaryFlow.kt中下面代码的步骤“sessi

我们的应用程序目前使用Corda V2.0,并部署到专用服务器,我们使用3个公证人配置RAFT,但当事务存在输入状态时,在日志中发现以下错误

messaging.NodeMessagingClient.sendWithRetry - Reached the maximum number of retries (3) for message ClientMessageImpl
在阅读FinalityFlow的代码后,我们发现这个错误应该发生在NotaryFlow.kt中下面代码的步骤“session.sendanderceivewithretry(tx)”中

val response = try {
                val session = initiateFlow(notaryParty)
                if (serviceHub.networkMapCache.isValidatingNotary(notaryParty)) {
                    subFlow(SendTransactionWithRetry(session, stx))
                    session.receive<List<TransactionSignature>>()
                } else {
                    val tx: Any = if (stx.isNotaryChangeTransaction()) {
                        stx.notaryChangeTx
                    } else {
                        stx.buildFilteredTransaction(Predicate { it is StateRef || it is TimeWindow || it == notaryParty })
                    }
                    session.sendAndReceiveWithRetry(tx)
                }
            } catch (e: NotaryException) {
                if (e.error is NotaryError.Conflict) {
                    e.error.conflict.verified()
                }
                throw e
            }
val response=try{
val会话=发起流量(公证方)
if(serviceHub.networkMapCache.isValidatingNotary(公证方)){
子流(SendTransactionWithRetry(会话,stx))
session.receive()
}否则{
val tx:Any=if(stx.isNotaryChangeTransaction()){
stx.notaryChangeTx
}否则{
buildFilteredTransaction(谓词{it is StateRef | | it is TimeWindow | | it==notaryParty})
}
会话。发送和接收带有重试(发送)
}
}捕获(e:NotaryException){
if(e.error为NotaryError.Conflict){
e、 error.conflict.verified()
}
掷e
}
我们尝试使用RPC端口在节点、公证人1、公证人2和公证人3之间相互ping,他们都在侦听,但从错误消息来看,我们不确定这是否是由节点和公证人之间的通信/消息传递无法工作引起的。公证人节点正在运行,其日志中没有任何错误


因此,我们想知道使用RPC端口相互ping是否可以确保消息传递在它们之间正常工作?是否有任何方法可以测试两个节点(节点和公证人)之间的消息是否可以正确发送和接收?非常感谢。

Corda 3中存在一个已知的错误,即重新启动Raft公证人群集后,它不再为客户端请求提供服务。相反,Raft集群最终由多个引线进行分区


Corda的JIRA董事会正在跟踪此问题:。

这是一个bug。这里正在跟踪它:。嗨,Joel,我认为这不仅仅是RAFT部分,似乎它像rpc套接字重新连接地址找不到导致在网络恢复后重试