azure - 与 Azure 事件中心通信时出现 EPOCH 错误

标签 azure signalr azure-eventhub

我正在使用 Azure 事件中心来监听应用程序中的实时数据。大多数时候,它工作正常,但有时会抛出以下错误 -

New receiver with higher epoch of '3109' is created hence current receiver with epoch '3108' is getting disconnected. If you are recreating the receiver, make sure a higher epoch is used. TrackingId:eb2a6f970000494500f379f85b484a9f_C-1553490498_B22, SystemTracker:xxxxxxxxxx:eventhub:xxxxxxx~2730|$default, Timestamp:7/13/2018 6:48:54 AM.

并且应用程序停止处理数据。我在网上浏览了几篇文章,但找不到任何解决方案。在 MSDN 上,我读到

that EPH relies on the fact that "there can only be 1 active epoch receiver on a consumer group at any given time

但我不确定如何确保只有 1 个事件纪元。此外,同一事件中心由三个不同的环境使用,即开发、测试、生产。

任何建议都将受到高度赞赏..

最佳答案

听起来您正在运行应用程序的两个实例、两个并发类或使用同一事件中心使用者组的两个应用程序。事件中心使用者组实际上是指向事件流上的时间点的指针。如果您尝试将一个消费者组与两个代码实例一起使用,那么您会遇到像您所看到的那样的冲突。

两者之一:

  1. 确保一次只有一个实例读取使用者组。
  2. 当您需要两个单独的程序或功能集来同时处理事件中心时,请使用两个使用者组。
  3. 如果您希望通过并行化来提高性能,请查看事件中心分区以及如何利用独立处理每个分区的优势。

还有一种替代方案,其中事件中心分区切换到另一台主机,作为事件中心内部负载平衡的一部分。在这种情况下,您可能会看到收到的错误。在这种情况下,只需记录它并继续。

Here is some good documentation to help you on your way.

关于azure - 与 Azure 事件中心通信时出现 EPOCH 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51441518/

相关文章:

sql-server - 在合并查询的 Insert 语句中使用 Select From table

node.js - 是否可以在 Node.js 后端使用 SignalR?

c# - Moq 可以模拟 HubConnection 但 RhinoMocks 不能?

azure - Azure 流分析是否读取来自所有分区的数据

azure - 向 Azure 事件中心中的特定使用者组发送和接收消息

Azure 事件中心 - "ErrorCode":"Forbidden","ErrorMessage":"SubCode=40300. 已达到或超过 EventHub 类型的资源最大数量

linux - 如何在 Azure Linux VM 上转移域和创建子域

azure - 在此情况下无法做出响应

Azure 存储 Blob Put SSL 握手错误

c# - 如何在 .net 3.5 中使用 SignalR