Службы событий одноранговых узлов в каналах

Общая информация

В предыдущих версиях Fabric служба событий одноранговых узлов была известна как концентратор событий (event hub). Эта служба отправляла события при добавлении нового блока в копию реестра однорангового узла независимо от канала, к которому этот блок принадлежал. Служба была доступна только для членов организации, которая контролировала этот одноранговый узел (т.е. узел, к которому производилось подключение для получения событий).

Начиная с версии 1.1, появились новые службы, которые отправляют события. Эти службы используют совершенно другую архитектуру для отправки событий в каждый канал. Это означает, что регистрация событий происходит на уровне канала, а не на уровне однорангового узла, что позволяет в подробностях контролировать доступ к данным однорангового узла. Запросы на получение событий принимаются от идентификаторов за пределами организации с одноранговыми узлами (как определено конфигурацией канала). Также это обеспечивает большую надежность и возможность получать события, которые могли быть пропущены (в результате проблем с подключением или в результате подключения однорангового узла к уже работающей сети).

Доступные службы

  • Deliver

Эта служба отправляет целые блоки, которые были записаны в реестр. Инициированные чейнкодом события можно найти в параметре ChaincodeActionPayload блока.

  • DeliverWithPrivateData

Эта служба отправляет те же данные, что и служба Deliver, дополнительно включая любые закрытые данные из подгруппы допуска, к которым организация клиента имеет доступ.

  • DeliverFiltered

Эта служба отправляет «отфильтрованные» блоки — минимальные наборы информации о блоках, которые записаны в реестре. Эта служба предназначена для использования в сети, в которой владельцы одноранговых узлов хотят, чтобы внешние клиенты в первую очередь получали информацию о своих транзакциях и их статусе. Инициированные чейнкодом события можно найти в параметре FilterChaincodeAction блока.

Примечание

Данные, записанные в событиях чейнкода, не включаются в отфильтрованные блоки.

Как подписаться на события

Подписаться на события можно путем отправки одноранговому узлу конверта, содержащего информационное сообщение об ожидании доставки, которое содержит желаемые позиции начала и конца, а также поведение поиска (блокировать до готовности или отказать, если не готов). Существуют вспомогательные переменные SeekOldest и SeekNewest, которые можно использовать для обозначения самого старого (то есть первого) блока или самого нового (то есть последнего) блока в реестре. Чтобы настроить отправление событий на неопределенный срок, сообщение SeekInfo должно включать позицию остановки типа MAXINT64.

Примечание

Если на одноранговом узле включена взаимная аутентификация с использованием TLS-шифрования, хэш TLS-сертификата должен быть указан в заголовке канала конверта.

По умолчанию службы событий используют политику Channel Readers для определения того, следует ли дать доступ запрашивающим события клиентам.

Описание сообщений доставки ответа

Службы событий отправляют ответные сообщения DeliverResponse.

Каждое сообщение содержит по одному из следующих элементов:

  • Статус — код статуса HTTP. Каждая из служб возвращает соответствующий код ошибки при сбое. В противном случае возвращается код 200 - SUCCESS, если служба завершает отправку всей информации, запрошенной в сообщении SeekInfo.
  • Блок — возвращается только службой Deliver.
  • Данные блока или закрытые данные — возвращаются только службой DeliverWithPrivateData.
  • Отфильтрованный блок — возвращается только службой DeliverFiltered.

Отфильтрованный блок содержит:

  • идентификатор канала;
  • номер (т. е. номер блока);
  • массив отфильтрованных транзакций;
  • идентификатор транзакции;
    • тип (например, ENDORSER_TRANSACTION, CONFIG);
    • код подтверждения транзакции;
  • отфильтрованные действия транзакции;
    • массив отфильтрованных действий чейнкода;
      • событие чейнкода для транзакции (без данных).

Документация по событиям SDK

Дополнительные сведения об использовании служб событий указаны в документации к SDK.