Java-библиотека узла обработки событий Azure - ReceiverRuntimeInformation не имеет фактической статистики по разделу
Я пытаюсь получить последний порядковый номер в очереди для отслеживания лага между потребителем и производителем на стороне потребителя, используя объект ReceiverRuntimeInformation, предоставленный PartitionContext при получении события. Однако объект ReceiverRuntimeInformation не имеет обновленных значений, связанных с этим конкретным разделом концентратора событий, он возвращает 0. Пример кода и вывод журнала:
public class EventProcessor extends IEventProcessorImpl{
@Override
public void onEvents(PartitionContext context, Iterable<EventData> messages) throws Exception {
ReceiverRuntimeInformation rte = context.getRuntimeInformation();
logger.info(rte.getLastEnqueuedOffset() + " * " + rte.getLastEnqueuedSequenceNumber() + " * " + rte.getPartitionId() + " * " + rte.getRetrievalTime());
}
}
Выход:
null * 0 * 3 * null
1 ответ
Это дополнительная функция. При создании EventProcessorHost
например, передать в EventProcessorOptions
с:
eventProcessorOptions.setReceiverRuntimeMetricEnabled(true);
Мы разработали это как Opt-in
особенность - поскольку он добавляет дополнительные байты ко всем полученным сообщениям EventHub (SDK использует все EventData
полученные по телеграфу клиентом - для передачи этой дополнительной информации).
Примечание: данные представлены в RecieverRuntimeInformation
является dynamic
и, следовательно, может быть stale
! Например - ReceiverRuntimeInformation.LastEnqueuedSequenceNumber
может измениться к тому времени, когда служба ответит! как могут быть новые события на этом разделе. Чтобы сделать данные релевантными - мы добавили свойство с именем - RetrievalTime
- что на самом деле, когда ReceiverRuntimeInformation
был извлечен из службы. Это может помочь понять - как устарела ценность ReceiverRuntimeInformation
является.