Службы событий одноранговых узлов в каналах =========================================== Общая информация ---------------- В предыдущих версиях 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 ---------------------------- Дополнительные сведения об использовании служб событий указаны в `документации к SDK `_.