Azure 服务总线主题-配对或重试

Azure Service Bus Topic-with paired or retry

我们在工作流管理器(审批流程)中使用 Azure 服务总线主题。无论如何,当我们将消息推送到服务总线主题时,我们不希望 lose/duplicate 消息。现在有两种选择。 一种。仅使用重试 b.仅使用配对服务总线而不重试。 由于我们不能同时使用两者,假设在消息推送期间,主服务总线不可用,然后将消息推送到配对服务总线,当主服务总线可用时,自动将消息推送到主服务总线。但是如果我们使用重试,重试将尝试将消息推送到主要服务总线,并且由于主要服务总线不可用,消息也会发送到配对服务总线。所以有机会处理重复的消息。

对于给定的问题陈述,将消息推送到服务总线的最佳选项“a”或“b”是哪个?

两种选择各有利弊。 使用配对命名空间,您可以在主命名空间关闭时继续发送消息。但不要被愚弄了。您仅在主名称空间关闭时存储这些消息。它们不会被接收者重试。其他缺点包括

  • 没有很好的可测试性。
  • 成本增加(您发送到辅助设备,从中取回以发送到主设备)。
  • 故障转移到辅助不是很直观。您必须在失败后手动重试该消息。 不会自动切换到辅助命名空间。

查看此 post 了解更多详情。

通过重试方法,您可以获得简单性。还有一些你无论如何都需要做的事情。使用 Azure 服务总线操作可能会因间歇性异常而失败,无论如何你都应该重试。仅重试的缺点 - 无法防止中断。这就是为什么您可以使用自定义实现将它与辅助名称空间结合起来的原因,但这是一个完全不同的温暖罐头。 NServiceBus 等库提供了自定义实现,您可以从中获取灵感。