Hyperledger Fabric Node sdk 1.3 - Использование 1.3-канального концентратора событий для нескольких пиров одной организации - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь перенести решение фабрики гиперледжеров, используя узел sdk. Нынешняя система использует ткань 1.2 и работает, как и ожидалось, но я бы хотел, чтобы новые функции 1.3.

Я обновил сеть до 1.3, узел sdk до 1.3.0 и изменил код приложения на использование канала eventhub. Но у меня есть проблемы с организациями, которые имеют более 1 пира при установке цепного кода. По какой-то причине я могу установить цепной код только в тех организациях, в которых есть один узел? Кажется, что концентратор событий не может подключиться к другим партнерам в той же организации. Глядя на логи от пиров, я также вижу трафик только от того, который может подключиться к eventhub

Что я делаю:

Для данной организации у меня есть 3 пира, где должен быть установлен цепной код. Для тестирования у меня есть 3 пира на локальном хосте со следующим конфигом:

{
    host: "peer0",
    url: `grpcs://${Config.ip}:8001`,
    publicKey: readFileSync(resolve("./resources/certs/some.org/peer0.pem")).toString()
},
{
    host: "peer1",
    url: `grpcs://${Config.ip}:8002`,
    publicKey: readFileSync(resolve("./resources/certs/some.org/peer1.pem")).toString()
},
{
    host: "peer2",
    url: `grpcs://${Config.ip}:8003`,
    publicKey: readFileSync(resolve("./resources/certs/some.org/peer2.pem")).toString()
}

Поэтому перед выполнением каких-либо операций я инициализирую концентратор событий для каждого узла примерно так:

initEventHubs() {

    // Setup event hubs
    try {
        // Now: 1.3.0
        this._peers.forEach((peer: Peer) => {

            const eventHub = this._channel.newChannelEventHub(peer);

            eventHub.registerBlockEvent((block: any) => {
                logger.debug('block', Utils.unmarshalBlock(block));
                this.emit('block', Utils.unmarshalBlock(block));
            }, (err) => {
                logger.error(err);
            });

            eventHub.connect(true);
            this._eventHubs.push(eventHub);
        });


        // Before: 1.2.0
        /*this._organisation.peers.forEach((peer: any) => {

            const eventHub = this._client.newEventHub();

            const peerOptions: object = {
                pem: peer.publicKey,
                'ssl-target-name-override': peer.host
            };

            eventHub.setPeerAddr(peer.eventHub, peerOptions);

            eventHub.connect();
            eventHub.registerBlockEvent((block: any) => {
                this.emit('block', Utils.unmarshalBlock(block));
            });

            this._eventHubs.push(eventHub);
        });*/

    } catch (e) {
        logger.error(`Failed to configure event hubs. Error ${e.message}`);
    }
}

Когда я выполняю создание канала или пытаюсь присоединиться к каналу, peer2 работает и ведет себя как ожидалось. Двое других выбрасывают Error: 14 UNAVAILABLE: Connect Failed из концентратора событий error: [Remote.js]: Error: Failed to connect before the deadline URL:grpcs://localhost:8001. Они находятся в правильном порту и достижимы. Если я просто использую один узел на одном и том же порту с той же конфигурацией, это будет работать.

У кого-нибудь есть опыт работы с 1.3 и установкой цепного кода через узел sdk на несколько пиров той же организации? Если так, то может кто-нибудь объяснить, как это произошло?

Я также искал другие примеры, но не нашел их для нескольких пиров одной организации с 1.3. Есть несколько примеров для 1.2, но не этот точный сценарий: образцы фабрики , фабрика узлов sdk и тесты от фабрики узлов sdk

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...