hyperledger fabric的区块事件

      hyperledger v1.1中的事务处理是一个跨越多个组件(application,endorsing peer,order,committing peer)的长操作,需要花费相当长的时间(以秒为单位而不是毫秒)来完成。因此,应用程序必须设计成异步通知的方式来进行对事务生命周期的处理。在交易提案成功通过之后,在事务消息已成功广播给order之前,应用程序应该注册一个侦听器listener,以便在事务达到最终状态(当包含该事务的块被添加时到peer的区块链上)时进行通知。

    fabric committing peers提供了一个事件流来将区块发布到已注册的侦听器。只要committing peers将验证区块添加到自己的账本上时,该块都会被发布给已经注册的监听器。fabric提供了三种注册侦听器来获得通知:

1:注册一个“块监听器”以便为每个区块事件调用。侦听器将传递一个完全解码的Block对象。请参阅registerBlockListener();

2:注册一个“事务监听器”,当id提交的特定事务被提交时(在已发布的块中发现)被调用。监听器将传递事务ID,事务状态和块号。请参阅registerTxListener();

3:注册一个“chaincode事件监听器”以在特定链代码事件到达时被调用。侦听器将传递ChaincodeEvent,块号,事务ID和事务状态。请参阅registerChaincodeEventListener();

    但是这些事件通知是短暂的,如果注册的监听者在事件发布时崩溃,监听器就会错过该事件。下面有几种技术可以弥补由于客户端崩溃导致的错过事件
1:注册块事件侦听器并记录接收到的块号,以便当下一个块到达并且其序号不是下一个序列时,则应用程序确切知道错过了哪些块事件。然后,它可以使用queryBlock从目标对端获取这些未命中的块,或使用startBlock选项注册事件以恢复或重放事件。如果您想停止收听,您还可以包含一个endBlock号码。
2:使用消息队列来捕获所有块事件。这样您将保证不会错过任何事件。结构事件监听器可以用任何编程语言编写。

原文地址:https://fabric-sdk-node.github.io/ChannelEventHub.html

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章