hyperledger-fabric - 失去与对等方的连接时,如何使fabric-network addBlockListener 自动重新连接?
问题描述
使用fabric-network NodeJS sdk v2.2,我正在实现一个必须捕获所有块并解析它们的块侦听器。
它应该具有弹性并在对等方出现故障或暂时无法访问时自动重新连接。在以前版本的 SDK 中,我们可以只使用 'onError' 回调并重新连接。现在,这部分被抽象掉了,你只有这样的东西:
network.addBlockListener(async (blockEvent: BlockEvent) => {
console.log(blockEvent.blockNumber);
});
当我杀死对等方时,网关和网络足够聪明,可以自动重新连接。然而,blocklistener 丢失了。为了完整起见,这里是删除对等 pod 时的错误日志。
[ServiceEndpoint]: Error: Failed to connect before the deadline on Eventer- name: peer-0.peer.org1, url:grpcs://peer-0.peer.org1:7051, connected:false, connectAttempted:true
[ServiceEndpoint]: waitForReady - Failed to connect to remote gRPC server peer-0.peer.org1 url:grpcs://peer-0.peer.org1:7051 timeout:3000
[Eventer]: checkConnection[peer-0.peer.org1:3] Event Service grpcs://peer-0.peer.org1:7051 Connection check failed :: Error: Failed to connect before the deadline on Eventer- name: peer-0.peer.org1, url:grpcs://peer-0.peer.org1:7051, connected:false, connectAttempted:true
[EventService]: send[peer-0.peer.org1] - #4 - no targets started - Error: Event service peer-0.peer.org1 is not connected
[BlockEventSource]: Failed to start event service message=Event service peer-0.peer.org1 is not connected, stack=Error: Event service peer-0.peer.org1 is not connected
[ServiceEndpoint]: Error: Failed to connect before the deadline on Eventer- name: peer-0.peer.org1, url:grpcs://peer-0.peer.org1:7051, connected:false, connectAttempted:true
[ServiceEndpoint]: waitForReady - Failed to connect to remote gRPC server peer-0.peer.org1 url:grpcs://peer-0.peer.org1:7051 timeout:3000
重新启动后,我可以再次执行事务,但块事件不再发生。
有没有办法捕获一种“断开连接”事件,轻松创建具有连接错误处理的自定义块事件侦听器或另一种自动重新连接块侦听器的方法?
解决方案
对等断开应该由 v2.2 SDK 透明地处理,而无需您在块侦听器中处理重新连接。块事件的排序和重复数据删除也在内部处理,因此您的侦听器应该完全不知道事件对等方之间的任何故障转移。
如果这不适用于最新的 v2.2.x 版本,那么请在 Jira 中提出尽可能详细的错误报告,以便重现该问题:https ://jira.hyperledger.org/projects/FABN
推荐阅读
- android - Buildozer规范包.域名大写问题
- amazon-web-services - 如何使用 Github 发布标签运行 AWS 代码管道?
- python - 由于内存问题,如何保存仅与预训练 bert 模型的分类器层相关的参数?
- sass - 如何在 Sass 中使用 @use 覆盖地图值?
- localhost - 如何使用 Hardhat 将以太币添加到我的 localhost Metamask 钱包?
- node.js - 使用nodejs将查找查询的结果从MONGODB导出到json文件
- spring-boot - Avro 类不能转换为 org.springframework.messaging.Message 类
- pdf - 在不使用工具栏的情况下放大和缩小嵌入的 pdf
- python - 错误:形状 (2,7) 和 (2,7) 未对齐:7 (dim 1) != 2 (dim 0)
- python - 从具有列表值的 pandas 数据帧创建稀疏数据帧