首页 > 解决方案 > Azure EventHubConsumerClient 是否会在 40 分钟后超时?

问题描述

我正在通过 EventHubConsumerClient 类上的 receiveFromPartition 方法从 Azure EventHub 集群同步读取事件。

我像这样创建客户端一次:

EventHubConsumerClient eventHubConsumerClient = new EventHubClientBuilder()
            .connectionString(eventHubConnectionString)
            .consumerGroup(consumerGroup)
            .buildConsumerClient());

然后,我只需使用 ScheduledExecutorService 每 1.5 秒通过以下方式检索事件:

IterableStream<PartitionEvent> receivedEvents = eventHubConsumerClient.receiveFromPartition(
                partitionId, 1, eventPosition);

我一直在生产中使用 SDK 的 V3 运行类似的逻辑而没有问题,但是在升级到 V5 后我遇到了问题。

当我开始这个循环时,一切似乎都工作正常,但在成功执行 40 分钟左右后,EventHubConsumerClient 开始根据请求超时(等待 2 分钟后),即使 EventHub 实例中肯定有新数据。

对应日志的一个小例子:

com.azure.core.amqp.implementation.RetryUtil: TimeoutException error occurred. Retrying operation.
com.azure.messaging.eventhubs.implementation.SynchronousEventSubscriber$ReceiveTimeoutTask: Work: 5. Timeout encountered, disposing of subscriber.

这是一个错误还是在新的 SDK 版本中这样的连接可以持续多长时间存在已知限制?如果是这样,我如何确保我可以依赖的长期连接?

任何建议将不胜感激,谢谢!

标签: azureazure-eventhub

解决方案


推荐阅读