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

Posted

技术标签:

【中文标题】我可以通过使用服务总线会话插入事件中心来避免重复事件吗?【英文标题】:Can I avoid Event Hub duplicates by plugging it with Service Bus Sessions? 【发布时间】:2022-01-15 20:44:26 【问题描述】:

我们的应用架构如下:

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

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

我可以在网上看到 Service Bus Sessions could avoid this duplicate issue.

Azure 服务总线现在支持会话,因此您可以按顺序执行 除了 Event 之外,还使用服务总线队列和主题进行处理 下面列出的集线器。服务总线会话提供了额外的好处 单独而不是批量重新处理失败。虽然事件 如果分区锁丢失,集线器可以保证如下所示的顺序 有序批次可能会在另一个实例中恢复,导致 重复。如果这是一个问题,请考虑使用服务总线会话。 两者都提供至少一次交付保证。

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

我的问题如下:

能否将 Service Bus Session 插入到我们当前的架构中? 还是我们活动中心的一项竞争服务?

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于我可以通过使用服务总线会话插入事件中心来避免重复事件吗?的主要内容,如果未能解决你的问题,请参考以下文章

灵活运用分布式锁解决数据重复插入问题

在流分析工作并将它们路由到服务总线之后,事件中心中的事件会发生啥?

C#总结EventBus事件总线的使用-自己实现事件总线

Vue中 事件总线(eventBus)使用

SpringCloud

如何防止重复消息在 WebJob 处理时不插入到服务总线队列中?