Hyperledger Fabric — автономный узел предотвращает подключение организации к сети

#hyperledger-fabric

#hyperledger-fabric

Вопрос:

У меня есть тестовая среда для hyperledger fabric 2.2. Две организации с 2 одноранговыми узлами в каждой.

Я хотел имитировать автономный одноранговый узел, поэтому я отключился peer2-org1 в целях тестирования, что приводит к сбою приложения для org1.

Это код приложения узла, который в основном взят из примера:

         this.gateway = new Gateway();
        const gatewayOpts = {
            wallet: this.wallet,
            identity: username,
            discovery: {
                enabled: true,
                asLocalhost: false
            }
        } as GatewayOptions;

        await this.gateway.connect(this.config, gatewayOpts);
        this.network = await this.gateway.getNetwork('somechannel');
  

Последняя команда gateway.getNetwork выдает следующее исключение:

 Error: Failed to connect before the deadline on Discoverer- name: peer2-org1, url:grpcs://peer2-org1:7051, connected:false, connectAttempted:true
     at checkState (/usr/src/app/node_modules/@grpc/grpc-js/build/src/client.js:69:26)
     at Timeout._onTimeout (/usr/src/app/node_modules/@grpc/grpc-js/build/src/channel.js:292:17)
     at listOnTimeout (internal/timers.js:549:17)
     at processTimers (internal/timers.js:492:7) {
   connectFailed: true
}
  

Я обнаружил, что приложение будет работать, если я удалю автономный узел peer2-org1 из gateway.connect объекта конфигурации, который выглядит следующим образом:

 (...)
"organizations": {
        "org1": {
            "mspid": "org1",
            "peers": [
                "peer1-org1", "peer2-org1"
            ],
            "certificateAuthorities": [
                "rca-org1"
            ]
        }
    },
(...)
  

Как я могу заставить это работать и сообщить библиотеке продолжить работу с peer1, если peer2 недоступен?

Комментарии:

1. Ваши одноранговые узлы работают в docker в вашей локальной системе или они находятся на отдельных серверах?

2. Это локальная среда docker-compose. Но приложение узла также запущено внутри среды docker (вот почему значение asLocalhost равно false).