【发布时间】:2017-05-20 16:30:53
【问题描述】:
我正在使用 EventProcessorHost 和 IEventProcessor 类(称为:MyEventProcessor)从 EventHub 接收事件。我通过在两台服务器上运行我的 EPH 将其扩展到两台服务器,并让它们使用相同的 ConsumerGroup 但唯一的主机名(使用机器名称)连接到集线器。
问题是:在白天/晚上的随机时间,应用程序会记录以下内容:
Exception information:
Exception type: ReceiverDisconnectedException
Exception message: New receiver with higher epoch of '186' is created hence current receiver with epoch '186' is getting disconnected. If you are recreating the receiver, make sure a higher epoch is used.
at Microsoft.ServiceBus.Common.ExceptionDispatcher.Throw(Exception exception)
at Microsoft.ServiceBus.Common.Parallel.TaskHelpers.EndAsyncResult(IAsyncResult asyncResult)
at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result)
此异常与 LeaseLostException 同时发生,当它尝试检查点时从 MyEventProcessor 的 CloseAsync 方法抛出。 (大概是因为 ReceiverDisconnectedException 而调用了 Close?)
我认为这是由于事件中心在扩展到多台计算机时的自动租约管理所致。但是我想知道我是否需要做一些不同的事情来让它更干净地工作并避免这些异常?例如:带有时代的东西?
【问题讨论】:
-
你看到这个答案了吗:stackoverflow.com/a/27832015/1658906?
-
@OlegBogdanov 谢谢,我在这里发帖的目的是看看“是的,忽略它”是否是一个得到发布并获得社区支持的答案。要回答该海报的后续频率问题:我的例外情况有时会在 1 小时内发生 5 次,但随后可能会跳过几个小时,然后再次发生。我猜这 5 次出现可能是针对不同的分区,我注意到我没有记录发生异常的 partitionId。
-
@juunas 谢谢,使用两个消费者组不是我的答案,因为当您必须为多种目的读取数据时,应该使用单独的消费者组,即:去做不同的事情用它。就我而言,我出于一个目的读取数据,但将其扩展到多台机器(该链接也描述了这一点,但我认为我正在按照他们和 MS 的建议进行操作)。我只是不清楚为什么在多台机器(或工作角色)上运行我的 EPH 会导致抛出异常。他们的文档中没有一个人说会这样。
标签: c# azure azureservicebus azure-eventhub