我们正在使用Azure Java event hub library从事件中心读取消息。大部分时间它都可以正常工作,但是我们会定期看到“com.microsoft.azure.servicebus.ServiceBusException”类型的异常,这些异常与事件中心中似乎被跳过的消息的时间相对应。
以下是一些例外细节示例:
示例callstack:
at com.microsoft.azure.servicebus.ExceptionUtil.toException(ExceptionUtil.java:93)
at com.microsoft.azure.servicebus.MessageReceiver.onError(MessageReceiver.java:393)
at com.microsoft.azure.servicebus.MessageReceiver.onClose(MessageReceiver.java:646)
at com.microsoft.azure.servicebus.amqp.BaseLinkHandler.processOnClose(BaseLinkHandler.java:83)
at com.microsoft.azure.servicebus.amqp.BaseLinkHandler.onLinkRemoteClose(BaseLinkHandler.java:52)
at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:176)
at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108)
at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:309)
at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:276)
at com.microsoft.azure.servicebus.MessagingFactory$RunReactor.run(MessagingFactory.java:340)
at java.lang.Thread.run(Thread.java:745)
图书馆的客户似乎没有办法识别问题,并避免在事件中心前面跳过我们跳过的邮件。有没有其他人遇到这个?是否有其他方法可以识别并避免跳过或重试错过的消息?
答案 0 :(得分:0)
此错误不会跳过任何消息 - 它会抛出异常,当它不应该时。这将导致EPH重新启动受影响的分区接收器。如果使用EventHubs javaclient的应用程序无法处理错误 - 它们可能会丢失消息。
这是我们的重试逻辑中的错误 - 在当前版本的EventHubs JavaClient
中 - 直到0.11.0
。
Here's跟踪进度的相应问题。
在EventHubs服务中 - 如果 - 由于任何原因 - Container
托管您的EventHubs'代码必须关闭,就会发生这些错误(为了解释,我们假设我们运行了一组{{ 1}}' - 就像每个Container
命名空间一样DockerContainers
- 这是一个瞬态错误 - 这个EventHub
最终会在另一个Container
中打开。
我们的javaclient-retry逻辑应该已经处理了这个错误并且应该重试 - 将使用修复程序发布此线程。
的修改
我们刚刚发布了0.12.0
- 解决了这个问题。
谢谢! Sreeram