#azure #azure-eventhub
#azure #azure-eventhub
Вопрос:
Есть ли способ узнать, в какой раздел записано сообщение, если используется EventHub.SendAsync (EventData) из Azure EventHub client SDK?
Мы намеренно не предоставляем ключ раздела, чтобы служба EventHub могла выполнять внутреннюю балансировку нагрузки, но хотела бы выяснить, в какой раздел в конечном итоге записываются данные, для диагностики проблем с сквозным потоком данных.
Ответ №1:
Ответ Ивана верен в контексте устаревшего SDK ( Microsoft.Azure.EventHubs
), но текущее поколение ( Azure.Messaging.EventHubs
) немного отличается. Вы не указываете конкретный язык, но концептуально ответ для них одинаков. Я буду использовать .СЕТЬ для иллюстрации.
Если вы не используете вызов, который требует указания раздела непосредственно при чтении событий, у вас всегда будет доступ к объекту, представляющему раздел, из которого было прочитано событие. Например, если вы используете метод EventHubConsumerClient ReadEventsAsync для изучения, вы увидите PartitionEvent, где Partition
свойство сообщает вам раздел, из которого Data
было прочитано.
При использовании EventProcessorClient ваш обработчик ProcessEventAsync будет вызван с набором ProcessEventArgs, где Partition
свойство сообщает вам раздел, из которого Data
было прочитано.
Ответ №2:
Прямого пути к этому нет. Но есть 2 обходных пути.
1. Используйте захват концентраторов событий для сохранения входящих событий, затем проверьте события в указанном хранилище больших двоичных объектов. Когда события хранятся в хранилище больших двоичных объектов, путь содержит идентификатор раздела, чтобы вы могли его узнать.
2. Используйте код. Создайте новую группу потребителей и следуйте этой статье, чтобы прочитать события. И в этом разделе есть метод public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
. Вы можете использовать этот параметр PartitionContext
для получения идентификатора раздела события (с помощью context.PartitionId
).
Комментарии:
1. Возможно, вы захотите прояснить, что # 2 основан на устаревшей версии SDK; мы бы рекомендовали новым разработчикам использовать Azure. Обмен сообщениями. EventHubs.