我正在开发一些代码来使用AMQP和Apache Qpid库处理Azure事件中心的事件。我注意到的一件事是,当我的应用程序重新启动时,将从使用者组/分区重新读取所有消息。
我的假设是我的消费者不是应该检查点(基于https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-features#event-consumers),但我不确定在JMS使用者身上需要设置哪些选项才能执行此操作。
我当前的连接代码(在附加消息侦听器之前)看起来像这样:
logging_level
在URL选项方面我需要做些什么来导致检查点发生?
答案 0 :(得分:0)
这个问题的简短答案是AMQP没有内置检查点的概念,因此,JMS也没有。这样的结果是,每次启动通过AMQP读取的应用程序时,它将从事件流的开头开始读取并重新处理所有内容。
如果应用程序开发正确(因为很有可能会进行有意倒带),则这不会引起功能问题,但确实有可能非常浪费资源。最后,我决定使用Microsoft的Java事件中心客户端,该客户端内置了检查点支持。
我在github页面上的一些示例代码中对此进行了概述,比较了https://github.com/michaeljmcd/eventhub-qpid-example和https://github.com/michaeljmcd/eventhub-client-example