首页 > 解决方案 > 失去与对等方的连接时,如何使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

重新启动后,我可以再次执行事务,但块事件不再发生。

有没有办法捕获一种“断开连接”事件,轻松创建具有连接错误处理的自定义块事件侦听器或另一种自动重新连接块侦听器的方法?

标签: hyperledger-fabrichyperledger-fabric-sdk-js

解决方案


对等断开应该由 v2.2 SDK 透明地处理,而无需您在块侦听器中处理重新连接。块事件的排序和重复数据删除也在内部处理,因此您的侦听器应该完全不知道事件对等方之间的任何故障转移。

如果这不适用于最新的 v2.2.x 版本,那么请在 Jira 中提出尽可能详细的错误报告,以便重现该问题:https ://jira.hyperledger.org/projects/FABN


推荐阅读