В предыдущих версиях Fabric служба событий одноранговых узлов была известна как концентратор событий (event hub). Эта служба отправляла события при добавлении нового блока в копию реестра однорангового узла независимо от канала, к которому этот блок принадлежал. Служба была доступна только для членов организации, которая контролировала этот одноранговый узел (т.е. узел, к которому производилось подключение для получения событий).
Начиная с версии 1.1, появились новые службы, которые отправляют события. Эти службы используют совершенно другую архитектуру для отправки событий в каждый канал. Это означает, что регистрация событий происходит на уровне канала, а не на уровне однорангового узла, что позволяет в подробностях контролировать доступ к данным однорангового узла. Запросы на получение событий принимаются от идентификаторов за пределами организации с одноранговыми узлами (как определено конфигурацией канала). Также это обеспечивает большую надежность и возможность получать события, которые могли быть пропущены (в результате проблем с подключением или в результате подключения однорангового узла к уже работающей сети).
Deliver
Эта служба отправляет целые блоки, которые были записаны в реестр. Инициированные чейнкодом события можно найти в параметре ChaincodeActionPayload
блока.
DeliverWithPrivateData
Эта служба отправляет те же данные, что и служба Deliver
, дополнительно включая любые закрытые данные из подгруппы допуска, к которым организация клиента имеет доступ.
DeliverFiltered
Эта служба отправляет «отфильтрованные» блоки — минимальные наборы информации о блоках, которые записаны в реестре. Эта служба предназначена для использования в сети, в которой владельцы одноранговых узлов хотят, чтобы внешние клиенты в первую очередь получали информацию о своих транзакциях и их статусе. Инициированные чейнкодом события можно найти в параметре FilterChaincodeAction
блока.
Note
Данные, записанные в событиях чейнкода, не включаются в отфильтрованные блоки.
Подписаться на события можно путем отправки одноранговому узлу конверта, содержащего информационное сообщение об ожидании доставки, которое содержит желаемые позиции начала и конца, а также поведение поиска (блокировать до готовности или отказать, если не готов). Существуют вспомогательные переменные SeekOldest
и SeekNewest
, которые можно использовать для обозначения самого старого (то есть первого) блока или самого нового (то есть последнего) блока в реестре. Чтобы настроить отправление событий на неопределенный срок, сообщение SeekInfo
должно включать позицию остановки типа MAXINT64
.
Note
Если на одноранговом узле включена взаимная аутентификация с использованием TLS-шифрования, хэш TLS-сертификата должен быть указан в заголовке канала конверта.
По умолчанию службы событий используют политику Channel Readers для определения того, следует ли дать доступ запрашивающим события клиентам.
Службы событий отправляют ответные сообщения DeliverResponse
.
Каждое сообщение содержит по одному из следующих элементов:
- Статус — код статуса HTTP. Каждая из служб возвращает соответствующий код ошибки при сбое. В противном случае возвращается код
200 - SUCCESS
, если служба завершает отправку всей информации, запрошенной в сообщенииSeekInfo
.- Блок — возвращается только службой
Deliver
.- Данные блока или закрытые данные — возвращаются только службой
DeliverWithPrivateData
.- Отфильтрованный блок — возвращается только службой
DeliverFiltered
.
Отфильтрованный блок содержит:
- идентификатор канала;
- номер (т. е. номер блока);
- массив отфильтрованных транзакций;
- идентификатор транзакции;
- тип (например,
ENDORSER_TRANSACTION
,CONFIG
);- код подтверждения транзакции;
- отфильтрованные действия транзакции;
- массив отфильтрованных действий чейнкода;
- событие чейнкода для транзакции (без данных).
Дополнительные сведения об использовании служб событий указаны в документации к SDK.