具有相同订阅的服务总线多个侦听器实例未接收消息

Posted

技术标签:

【中文标题】具有相同订阅的服务总线多个侦听器实例未接收消息【英文标题】:Service Bus multiple listener instances with same subscription not receiving messages 【发布时间】:2018-04-11 08:36:48 【问题描述】:

我有一个5节点集群,每个节点都有一个微服务(这是一个无状态的可靠服务)在运行,它正在接收来自Azure Service Bus的消息。 p>

由于我只为 my_topic(Topic Name) 创建了一个 my_Subscription(Subscription Name),因此微服务实例正在随机接收消息。

我期待它在每个实例都订阅服务总线主题时被广播。

现在,如果是这种情况,我需要为每个实例创建一个新订阅,我需要更改 ARM template 并在每次我希望扩展服务时重新部署它? p>

【问题讨论】:

考虑到您的所有微服务实例都只轮询一个订阅,这难道不是预期的行为吗? @GauravMantri 现在如果是这种情况,我需要为每个实例创建一个新订阅,我需要更改 ARM 模板并在每次我希望我的服务扩展时重新部署它? 听起来您已经准备好使用竞争消费者模式 - docs.microsoft.com/en-us/azure/architecture/patterns/… 我很想知道您为什么希望多个实例处理同一条消息。通常我们希望消息只被处理一次。你介意详细说明一下吗?谢谢! @GauravMantri 在我的情况下,需要同时更新所有实例的 inMemory 缓存,因此您需要在所有实例中使用消息 【参考方案1】:

如果您可以让您的集群节点在启动时动态创建自己的订阅(这应该不会太难)。也许使用类似节点的唯一 ID 作为订阅名称。然后每个节点将只接收自己的消息副本,从而实现您的目标。但是,如果您的节点一直来来去去,那么您需要实施一些清理机制以确保过时的订阅不会阻塞主题的存储。

【讨论】:

以上是关于具有相同订阅的服务总线多个侦听器实例未接收消息的主要内容,如果未能解决你的问题,请参考以下文章

同一消息的多个订阅者 Rebus Azure 服务总线

Azure 服务总线主题订阅者接收订单

如何从 Windows 服务总线订阅中获取未处理的消息计数?

使用 Azure 服务总线队列侦听器定期在 RenewToken 上接收未经授权的访问错误

qpid proton url,用于从给定订阅(主题)接收消息

Azure 服务总线:通过具有内置重试策略的消息泵接收到的瞬时错误(异常)。为啥?