1. 程式人生 > >Hyperledger系列(十一)Peer channel-based event services

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

中找到這些event。

怎樣註冊事件(register for events)

通過向peer傳送,包含deliver seek info message的信封,來完成來自任一服務的事件的註冊。該信封包含期望的開始和停止位置,查詢行為(如果未準備就緒,則阻塞直到就緒或失敗)。 有幫助變數SeekOldestSeekNewest可用於指示ledger中最早的(即第一個)塊或最新的(即最後一個)塊。 要使服務無限期地傳送event,SeekInfo訊息應該包含一個停止位置的MAXINT64

預設情況下,這兩個服務都使用Channel讀取器策略,來確定是否為請求客戶端授權event。

deliver response 訊息概覽

event services發回DeliverResponse訊息。

每個訊息都包含以下內容之一:

  • status - HTTP狀態碼。 如果發生任何故障,兩種服務都將返回相應的故障程式碼; 否則,一旦服務完成傳送SeekInfo訊息請求的所有資訊,它將返回200 - SUCCESS。
  • block - 僅由Deliver service返回。
  • filtered block - 僅由DeliverFilteredservice返回。

一個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