Как прослушивать события в Hyperledger Fabric Composer?

Я не получил никаких уведомлений о событиях и мне интересно, не пропустил ли я что-то. Я следовал инструкциям на веб-сайте Fabric Composer, чтобы определить BasicEvent в моей модели cto, и добавил код для создания и отправки событий в транзакции, а также обновил сеть. Я создал отдельную программу eventListener.js, которая подписывается на события с помощью businessNetworkConnection, используя пример кода с веб-сайта.
После того, как я запускаю приложение eventListener.js, оно, кажется, слушает (после получения сообщения о состоянии подключения в консоли, больше ничего не происходит... он не возвращается к обычной строке подсказки.) Затем я выполняю транзакцию, которая должна генерировать событие, и она выполняется успешно, но в другом окне терминала, где работает eventlistener.js, событие не получено .
Вот ключевая часть программы eventListener.js:

businessNetworkConnection.connect(connectionProfile, businessNetworkIdentifier, participantId, participantPwd)
.then((result) => {
    businessNetworkDefinition = result;
    console.log('Connected: BusinessNetworkDefinition obtained=' + businessNetworkDefinition.getIdentifier());
  });
businessNetworkConnection.on('event', (event) => {
    // event: { "$class": "org.namespace.BasicEvent", "eventId": "0000-0000-0000-000000#0" }
    console.log(event);
  });

Должна ли команда businessNetworkConnection.on('event', (event) ... вызывать зависание программы во время ее прослушивания?
Если да, то есть ли что-то еще, что можно сделать для устранения проблемы? ?
Я использую HLF v0.6 на локальном Docker.


person TKO85    schedule 28.05.2017    source источник
comment
Это не должно привести к его зависанию. Вы можете попробовать DEBUG=composer:* node myApplication.js, чтобы получить отладочную информацию.   -  person david_k    schedule 29.05.2017


Ответы (2)


Я думаю, ваша проблема в том, что вы не ждете подключения businessNetworkDefinition, прежде чем зарегистрировать своего слушателя. Помните, что блок then выполняется асинхронно, и ваш следующий код businessNetworkConnection.on будет выполняться немедленно.

Вам следует добавить второй блок then, чтобы зарегистрировать прослушиватель после подключения к businessNetworkDefinition.

e.g.

return adminConnection.connect('hlfv1', 'admin', 'adminpw')
    .then(() => {
        return BusinessNetworkDefinition.fromDirectory(path.resolve(__dirname, '..'));
    })
    .then((businessNetworkDefinition) => {
        return adminConnection.deploy(businessNetworkDefinition);
        // return true;
    })
    .then(() => {
        businessNetworkConnection = new BusinessNetworkConnection();
        return businessNetworkConnection.connect('hlfv1', 'my-network', 'admin', 'adminpw');
    })
    .then(() => {
        businessNetworkConnection.on('event', (event) => {
            console.log( '****** received the event ' + JSON.stringify(businessNetworkConnection.getBusinessNetwork().getSerializer().toJSON(event)));
        });
    });
person Dan Selman    schedule 30.05.2017

Я написал пример кода для базового примера приложения, разработанного командой Hyperledger. Вы можете ознакомиться с этим фрагментом кода: SampleEventListener

person 0x3bfc    schedule 06.09.2017