基于通道的节点事件服务¶
概览¶
在 Fabric 之前的版本中,节点事件服务被称为事件仓库(event hub)。当 Peer 节点的账本中新增一个区块的时候该服务就会发送一个事件,无论该区块属于哪个通道,只有组织成员中运行事件节点才可以访问该事件(例如,连接到事件的节点)。
从v1.1开始,有两个新的服务提供事件。这些服务使用完全不同的设计来为每个通道提供事件。这意味着事件的注册发生在通道的级别,而不是 Peer 节点,允许对 Peer 节点数据的访问进行细粒度的控制。通过 Peer 节点的组织之外的标识(由通道配置定义)来接受接收事件的请求。这还提供了更高的可靠性和接收可能错过的事件的方法(无论是由于连接问题还是因为 Peer 节点正在加入网络)。
启动服务¶
Deliver
该服务发送已经提交到账本的所有区块。可以在区块的 ChaincodeActionPayload 中查看链码设置的所有事件。
DeliverFiltered
该服务发送“经筛选”的区块,已经提交到账本的区块信息的最小集合。它用在 Peer 节点希望外部客户端主要用来接收交易的信息和状态的网络中。可以在区块的 FilteredChaincodeAction 中查看链码设置的所有事件。
注解
链码事件的负载不会包含在筛选出的区块中。
如何注册事件¶
通过向 Peer 节点发送一个带有搜索种子信息的信封(envelope)来完成对任意服务的注册,该信息中包含了所需的开始和结束的位置和搜索行为(直到准备好前阻塞或没有准备好就失败)。SeekOldest 和 SeekNewest 变量用来表明是账本中最新的(最后的)或者最旧的(第一个)区块。要让服务无限期地发送事件,SeekInfo 消息应该包含 MAXINT64 的停止位置。
注解
如果节点启用了 TLS,就必须在信封的通道头部中设置 TLS 证书。
默认情况下,两个服务都使用通道读者的策略(Channel Readers policy)来决定哪些客户端可以接收事件。
发送响应信息概览¶
事件服务发回 DeliverResponse 信息。
没条消息包含如下内容:
- 状态(status) – HTTP 状态码。两个服务在发生错误是都会返回相应的状态码;否则会返回
200 - SUCCESS表示服务发送完成了SeekInfo信息中请求的内容。- 区块(block) – 只有
Deliver服务返回。- 筛选出的区块(filtered block) – 只有
DeliverFiltered服务返回。
筛选出的区块包含:
- 通道 ID。
- 序号 (例如区块号)。
- 筛选出的交易数组。
- 交易 ID.
- 类型 (例如
ENDORSER_TRANSACTION,CONFIG)。- 交易验证码。
- 筛选出的交易活动。
- 筛选出的链码活动数组。
- 交易的链码事件(有效负载为零)。