如何监听Hyperledger Fabric Composer中的事件?

时间:2017-05-28 07:27:44

标签: hyperledger-composer

我还没有收到任何活动通知,我想知道我是否遗漏了一些东西。 我按照Fabric Composer网站上的说明在我的cto模型中定义了BasicEvent,并添加了用于在事务中创建和发出事件并更新网络的代码。我创建了一个单独的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)...命令是否会导致程序在侦听时显示挂起?
如果是这样,是否还有其他措施可以解决问题所在? 我在本地Docker上使用v0.6 HLF。

2 个答案:

答案 0 :(得分:0)

我认为您的问题是,在注册听众之前,您不必等待连接businessNetworkDefinition。请记住,then块是异步执行的,并且您的以下businessNetworkConnection.on代码将立即执行。

在连接businessNetworkDefinition之后,您应该添加第二个then块来注册您的侦听器

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)));
        });
    });

答案 1 :(得分:0)

我为Hyperledger团队开发的基本示例应用程序编写了示例代码。您可以从以下代码段中查看:SampleEventListener