Azure Service Bus - 订阅者可以独立订阅一个订阅并共享相同的消息吗?

13
我是Azure Service Bus的新手,已经成功创建了用于创建主题和单独的订阅者应用程序来接收其消息的poc。
根据这篇文章,我引用: “一个主题最多可以有2,000个与之关联的订阅,每个订阅都会获得发送到主题的所有消息的独立副本。一个或多个订阅者可以独立订阅一个订阅,并竞争从中获取消息。”

http://convective.wordpress.com/2011/06/08/windows-azure-appfabric-service-bus-queues-and-topics/

我感兴趣的是将此扩展为多个应用程序独立订阅相同主题,但不会相互竞争。我的当前 poc 有一个发送器和两个单独的应用程序订阅相同的主题和订阅。我看到的行为是,如果我从发送器发布一条消息,则其中一个正在运行的订阅应用程序将接收它;但另一个则不会。
我的问题是,是否可以使多个独立的应用程序接收相同的主题消息?任何建议都将不胜感激!
2个回答

24
当您创建主题的订阅时,它会有一个特定的订阅名称。然后开始请求该订阅名称的消息的任何消费者将竞争该订阅上的消息。如果您想要独立的应用程序各自接收发送到主题的消息的副本,则它们将需要为主题创建自己的订阅。您几乎可以将每个订阅视为由主题提供的队列。
我将举一个大学的例子。 主题是“新生”,学院中的每个部门都希望接收新生消息的副本。因此,每个部门都将有自己的订阅。 将会有 “音乐”,“账单”,“科学”,“数学”等订阅,每个订阅都订阅了“新生”。通过这种方式,每个部门都会接收到新生消息的副本,甚至可以根据他们关心的内容进行筛选。如果部门在处理这些消息方面落后,他们可以使用其订阅名启动更多的处理器实例,从而增加他们的吞吐量,因为更多的消费者将竞争他们订阅中的消息。
因此,在您的示例中,每个应用程序都需要创建自己的订阅或在启动时被分配一个唯一的订阅来开始拉取。请注意,如果让应用程序生命周期决定订阅的生命周期(这意味着您在应用程序启动时创建订阅并在应用程序关闭时销毁它),则需要注意,如果没有活动订阅,则发送到主题的消息将被简单丢失。但是,您可以创建一个 catch-all 订阅,该订阅仅接收未传递到任何其他订阅的消息。这取决于您想要实现什么目标。

嗨,MikeWo,谢谢你的解释。 - Heretix
1
@mikewo,当你说“如果没有活动订阅,则发送到主题的消息将被简单丢失”时,这不取决于消息的存活时间吗? 即使没有活动订阅并且向主题添加了消息,如果应用程序在消息过期之前订阅该主题,它不会收到该消息吗? 感谢您的帖子。 它非常有帮助。 - Zephyr was a Friend of Mine
1
@NoelAbrahams 不会。如果没有订阅,并且将消息提交到主题,则系统会假定没有人关心并不保留该消息。消息的过期时间是在其传递给关心它的队列/订阅时生效的。队列或主题上消息的默认存活时间为Timespan.MaxValue,因此理论上,如果按照您所询问的方式工作,则它们将一直存在,直到有人订阅它们。 - MikeWo

2
你需要的不是Service Bus,而是Event Hub。Event Hub正是你所描述的工作方式,并且可以通过AMQP进行访问。

这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Gilles Gouaillardet
我不理解评审员的评论。我和问题描述中提到的完全一样,我按照我的回答所述解决了它。如果您感兴趣,我有代码可以证明。您是否是Service Bus或Event Hub的专家,以至于会如此轻易地驳回一个经过适当研究的答案? - Gábor Paller
格式不正确,这可能是为什么它被标记为低质量帖子的原因。它要么是一个(好的)评论,要么是一个只有链接的答案,但没有链接,而且它们都不适合作为SO上的答案。审查不是关于专业知识,而是关于赞和踩。 - Gilles Gouaillardet
很抱歉,但你完全让我摸不着头脑。我的帖子格式?什么链接回答?什么赞或踩?我都没有做过这些。我是通过谷歌找到这个问题的,而且我和提问者一样遇到了同样的问题。花了我一些时间才意识到,虽然使用服务总线很难解决这个非常频繁的问题,但使用事件中心却更容易解决,并分享了我在我们产品中实际实现的观点。然后我一直收到这些模板评论(这不是第一次了),老实说,这真的让我感到困惑。 - Gábor Paller
1
格式不正确,你的回答没有展示Event Hub如何解决问题,甚至没有提供链接。你不能指望SO读者盲目相信你的话,这可能就是为什么你的帖子没有得到赞的原因。简而言之,当你有观点时,请点击评论,当你有事实时,请点击回答。这基本上是SO的工作方式,但不要把我的话当成圣旨,参观一下吧。 - Gilles Gouaillardet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接