Azure 事件处理器主机 java 库 - ReceiverRuntimeInformation 在分区上没有实际统计信息

Azure Event Processor Host java library - ReceiverRuntimeInformation doesn't have actual stats on a partition

我正在尝试获取最后一个排队的序列号,以在接收到事件时利用 PartitionContext 提供的 ReceiverRuntimeInformation 对象来跟踪消费者端的消费者和生产者之间的滞后。但是,ReceiverRuntimeInformation 对象没有与事件中心的特定分区相关的更新值,它 returns 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

这是一个可选功能。在创建 EventProcessorHost 实例时,通过 EventProcessorOptions 传入:

eventProcessorOptions.setReceiverRuntimeMetricEnabled(true);

我们将此设计为 Opt-in 功能 - 因为它会向收到的所有 EventHub 消息添加额外的字节(sdk 使用客户端在线接收的所有 EventData - 来传输此额外信息)。

注意RecieverRuntimeInformation中的数据是dynamic,因此可以是stale!例如 - ReceiverRuntimeInformation.LastEnqueuedSequenceNumber 可能会在服务实际响应时发生变化!因为该分区上可能有新的事件。为了使数据相关 - 我们添加了一个名为 属性 - RetrievalTime - 实际上是从服务中检索 ReceiverRuntimeInformation 的时间。这有助于理解 - ReceiverRuntimeInformation 的值有多陈旧。