我可以通过使用服务总线会话来避免事件中心重复吗?

Can I avoid Event Hub duplicates by plugging it with Service Bus Sessions?

我们的应用架构如下:

第三方事件中心 ==> 我们的 azure 函数 ==> 我们的事件中心 ==> 我们的事件中心捕获。

问题是我们是 getting duplicates messages quite often,我们没有数据中的任何主键。

我可以在线阅读 服务总线会话 could avoid this duplicate issue.

Azure Service Bus now supports sessions, so you can do in order queue processing with service bus queues and topics in addition to Event Hubs listed below. Service Bus Sessions provide the added benefit of reprocessing failures individually instead of in batches. While Event Hubs can guarantee order as show below, if a partition lock is lost the in-order batch could resume in another instance causing duplicates. Consider using Service Bus Sessions if this is an issue. Both provide at-least-once delivery guarantees.

我是 Azure 和流式云架构的新手。

我的问题如下:

我不确定我们现在是否准备好放弃我们的事件中心,因为我们刚刚投入资源来实施它。

Azure 服务总线和 Azure 事件中心 two different products。您不能将一种产品的功能用于另一种产品。

相反,您可以尝试找到一种方法来识别重复邮件。如果消息本身没有唯一性 属性,那么您可以尝试根据属性创建消息的摘要或哈希。然后跟踪 Azure 事件中心的消息保留期的哈希值。当收到新消息时,创建消息的哈希值并与跟踪的哈希值进行比较以检查唯一性。

服务总线会话并不能真正保证不会有重复,因为它仍然是“至少一次交付”,但是服务总线有一个名为 duplicate detection 的功能,基本上有助于防止重复对于消息 coming 到命名空间,它对传出的重复项没有帮助(主要是由瞬态网络问题引起的)。

除了我上面提到的,你描述的行为听起来不正常。是的,事件中心可能有重复,但它不应该经常发生,如果是这种情况,我建议关注导致如此多重复的根本原因。 (您可以打开 MS 支持票以寻求帮助以找到它) 但是,如果这些重复项不是那么多,那么我建议您按照其他答案的建议让您的消费者对重复项具有弹性。