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 является.

Другие вопросы по тегам