Azure ServiceBus:所有主题订阅者必须处理消息

时间:2017-02-18 15:23:36

标签: .net azure azureservicebus azure-servicebus-topics

我刚刚开始使用Azure ServiceBus。有一件事我并不完全清楚,而且我很难找到答案。

如果我在订阅消息上呼叫message.Complete(),这是否意味着此消息将不再发送给任何其他订阅者,或者我是否仅为当前订阅者填写此消息?换句话说,服务总线是否跟踪每个订户或每个订阅的消息?

在我的特定用例中,我希望消息由 所有 订阅者处理,而不仅仅是 any / one 订阅者。是否可以使用主题?

3 个答案:

答案 0 :(得分:8)

您的问题已经得到解答,但似乎有一些混淆(订阅\订阅者),以及推荐的用例是什么。

考虑一个简单的队列,一端放置消息,另一端弹出消息。这就是ServiceBus队列的行为方式 现在考虑一个队列,你仍然把消息放在一端,但然后它分成多个末端,你可以从中弹出消息。这描述了一个主题(放置消息的位置)和订阅(弹出消息的位置)。

在主题\订阅中,主题中的邮件复制到订阅。因此,每个订阅都独立于其他订阅。它就像是队列的不同副本。

现在,从订阅接收消息的客户端应用程序就是您所谓的订阅者。每个客户端(订户)都旨在连接到单个订阅。在这种情况下,订阅者不会竞争消息,并且每个订阅者都可以处理与其他订阅者相同的消息。

另一方面,如果您有许多连接到同一订阅的客户端应用程序(订阅者),那么他们自然会竞争相同的消息。

希望这能解释你得到的答案(这似乎是相互矛盾的,但实际上只是以不同的方式使用相同的术语)。最后,您可以使用ServiceBus完成这两种方案。

答案 1 :(得分:4)

消息旨在由单个竞争消费者处理。否则,它将被视为重复消息。

如果您需要将同一消息发送到同一逻辑用户的多个实例,则每个用户必须拥有自己的专用订阅队列和默认过滤器。

例如:使用云服务时,您需要为每个CS角色实例创建一个订户。每个订阅队列需要是唯一可识别的,并且唯一标识符必须是确定性的。一种选择是使用CS实例ID。每当进程向外扩展时,实例ID都将附加到订阅队列。这种方法也是一个挑战。当进程扩展时,可能会有剩余的未处理消息。

答案 2 :(得分:1)

所以,显然这是不可能的。订阅 竞争 的订阅者处理邮件,并且不能全部处理相同的邮件。需要单独订阅。

此问题或多或少与Azure Service Bus - subscribers can independently subscribe to a subscription and share the same message?

重复
相关问题