Peer channel-based event services¶
General overview¶
Fabricの過去バージョンにおいて、ピアイベントサービスはイベントハブとして知られていました。このサービスは、チャネルに関わらず新しいブロックがピアの台帳に追加された際にイベントを送信し、イベンティングピア(すなわちイベントのために接続されているピア)を稼働させている組織のメンバのみがアクセスすることが出来ます。
v1.1から、イベントを提供する新しいサービスがあります。これらのサービスは全く異なる設計となっており、各チャネルをベースにしたイベント提供を行います。これは、ピアのデータへのきめ細かい制御を実現するために、ピアではなくチャネルのレベルでイベントの登録が実施されます。イベントを受信するリクエストは、そのピアの組織とは関係なく、(チャネル設定で定義されている通り)アイデンティティを元に受け付けられます。これはより良い信頼性と(接続上の問題やピアが既に動いているネットワークに参加するかに関係なく)届かなかったイベントを受信する方法も提供します。
Available services¶
Deliver
このサービスは、台帳にコミットされた全てのブロックを送信します。もしチェーンコードによって設定されたイベントであれば、ブロックの ChaincodeActionPayload
内に格納されています。
DeliverWithPrivateData
このサービスは、 Deliver
サービスと同じデータに加えて、クライアントの組織がアクセスを許可されたコレクションのプライベートデータを含めて送信します。
DeliverFiltered
このサービスは、台帳にコミットされたブロックに関する情報の最小セットである "フィルターされた" ブロックを送信します。外部のクライアントがそのクライアントのトランザクションやトランザクションの状態に関する情報を主に使いたい、とピアの所有者が望むようなネットワークで使用することを目的としています。もしチェーンコードによって設定されたイベントであれば、フィルタードブロックの FilteredChaincodeAction
に格納されます。
注釈
チェーンコードイベントのペイロードはフィルタードブロックに含まれません。
How to register for events¶
イベントの登録は、スタートとストップの位置、シークの挙動(利用可能になるまでブロックするか、利用できなければ失敗するか)を含むピアへの配信シーク情報メッセージを含むエンベロープを送信することで完了します。ヘルパー変数として SeekOldest
と SeekNewest
があり、台帳の一番古い(すなわち最初の)ブロックもしくは最新の(すなわち最後の)ブロックを示します。サービスに無制限に送信させるには、 SeekInfo
メッセージのストップ位置を MAXINT64
にする必要があります。
注釈
もし相互TLSがピアで有効になっていた場合、TLS証明書のハッシュ値をエンベロープのチャネルヘッダーに設定しなければなりません。
デフォルトでイベントサービスは、イベントをリクエストするクライアントを許可するかどうかを決めるために、チャネルのReadersポリシーを使用します。
Overview of deliver response messages¶
イベントサービスは、 DeliverResponse
メッセージを送り返します。
各メッセージは以下を含みます:
- ステータス -- HTTPステータスコード。 各サービスは、エラーが発生した場合、適切なエラーコードを返します。そうでない場合、
SeekInfo
メッセージによってリクエストされた全情報の送信をサービスが完了すると200 - SUCCESS
を返します。- ブロック --
Deliver
サービスによってだけ返します。- ブロックとプライベートデータ --
DeliverWithPrivateData
サービスによってだけ返します。- フィルタードブロック --
DeliverFiltered
サービスによってだけ返します。
フィルタードブロックは以下を含みます:
- チャネルID
- 番号(すなわちブロック番号)
- フィルタードトランザクションの配列
- トランザクションID
- タイプ (e.g.
ENDORSER_TRANSACTION
,CONFIG
).- トランザクション検証コード
- フィルタードトランザクションのアクション
- フィルタードチェーンコードのアクションの配列
- トランザクションに対するチェーンコードイベント (ただしペイロードは消去)
SDK event documentation¶
イベントサービスに関しての詳細は、 SDK documentation を参照して下さい。