Hyperledger系列(十一)Peer channel-based event services
簡介
在以前的Fabric版本中,peer event service 被稱為event hub。 無論block關聯哪個Channel,該服務都會在任何時候,將新block新增到peer Ledger時傳送event。並且只有執行event peer的組織的成員才可以訪問該event。
從v1.1開始,有兩個提供event的新服務。 這些服務使用完全不同的設計來按每個Channel提供事件。 這意味著event的註冊發生在channel的層面而不是peer層面,允許對peer資料的訪問進行細粒度上的控制。 請求接受來自peer組織外部的身份的event(由Channel配置定義)。 這也提供了更高的可靠性和接收可能錯過的event(無論是由於連線問題,還是由於peer正在加入已經執行的網路)。
Available services
Deliver
該服務傳送已提交到Ledger的整個block。 如果event由Chaincode設定,則可以在block的ChaincodeActionPayload
中找到這些event。
DeliverFiltered
該服務傳送“filtered” block,以及有關已提交到ledger的塊的最小資訊集。 它旨在用於網路中,peer的所有者,希望外部client主要接收有關其transaction和這些transaction狀態的資訊。 如果任何event由Chaincode設定,則可以在filtered block的FilteredChaincodeAction
怎樣註冊事件(register for events)
通過向peer傳送,包含deliver seek info message的信封,來完成來自任一服務的事件的註冊。該信封包含期望的開始和停止位置,查詢行為(如果未準備就緒,則阻塞直到就緒或失敗)。 有幫助變數SeekOldest
和SeekNewest
可用於指示ledger中最早的(即第一個)塊或最新的(即最後一個)塊。 要使服務無限期地傳送event,SeekInfo
訊息應該包含一個停止位置的MAXINT64
。
預設情況下,這兩個服務都使用Channel讀取器策略,來確定是否為請求客戶端授權event。
deliver response 訊息概覽
event services發回DeliverResponse
訊息。
每個訊息都包含以下內容之一:
- status - HTTP狀態碼。 如果發生任何故障,兩種服務都將返回相應的故障程式碼; 否則,一旦服務完成傳送
SeekInfo
訊息請求的所有資訊,它將返回200
- SUCCESS。 - block - 僅由
Deliver
service返回。 - filtered block - 僅由
DeliverFiltered
service返回。
一個filtered block 包含:
channel ID.
number (如 block number)
filtered transactions陣列
transaction ID
type (如ENDORSER_TRANSACTION
,CONFIG
)
transaction validation code.filtered transaction actions
filtered chaincode actions陣列。
transaction的chaincode event。
歡迎加入區塊鏈技術交流QQ群 694125199