我们的应用目前正在使用Corda V2.0,并且部署到专用服务器,我们使用配置了RAFT的3位公证人,但是当存在事务的输入状态时,在日志中找到以下错误
messaging.NodeMessagingClient.sendWithRetry - Reached the maximum number of retries (3) for message ClientMessageImpl
在阅读了FinalityFlow的代码之后,我们发现这个错误应该发生在步骤" session.sendAndReceiveWithRetry(tx)"以下代码在NotaryFlow.kt中
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
}
我们尝试在节点之间互相ping通,使用RPC端口公证1,2和3,所有这些都在监听,但是从错误消息中,我们不确定这是否是由通信/消息传递引起的节点和公证人之间的工作。公证节点正在运行,其日志中没有任何错误。
所以我们想知道使用RPC端口互相ping是否可以确保消息传递在它们之间运行良好?是否有任何方法可以测试是否可以正确发送和接收两个节点(节点和公证)之间的消息传递?非常感谢。
答案 0 :(得分:0)
Corda 3中存在一个已知错误,即在重新启动Raft公证群集后,它不再为客户端请求提供服务。相反,Raft集群最终被多个领导者划分。
此问题正在Corda的JIRA董事会中进行跟踪:https://r3-cev.atlassian.net/browse/CORDA-1527。