Azure 服务总线 - 订阅者可以独立订阅订阅并共享相同的消息?

Posted

技术标签:

【中文标题】Azure 服务总线 - 订阅者可以独立订阅订阅并共享相同的消息?【英文标题】:Azure Service Bus - subscribers can independently subscribe to a subscription and share the same message? 【发布时间】:2014-02-07 13:50:06 【问题描述】:

我是 Azure 服务总线的新手,并且已成功创建了用于创建主题的 Pocs 和用于接收其消息的单独订阅者应用程序。

根据这篇文章,我引用: “一个主题最多可以有 2,000 个与之关联的订阅,每个订阅都获得发送到该主题的所有消息的独立副本。一个或多个订阅者可以独立订阅一个订阅并竞争来自它的消息。”

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

我感兴趣的是将其扩展到多个应用程序以独立订阅同一主题,但不竞争

我当前的 poc 有一个发送者和两个单独的应用程序订阅了相同的主题和订阅。我看到的行为是,如果我从发件人那里发布一条消息,两个正在运行的订阅应用程序中的任何一个都会收到它;但不是另一个。

我的问题是多个独立的应用程序是否可以接收相同的主题消息?任何建议将不胜感激!

【问题讨论】:

【参考方案1】:

当您为某个主题创建订阅时,它具有特定的订阅名称。然后开始为该订阅名称请求消息的任何消费者都将竞争该订阅上的消息。如果您希望独立的应用程序每个都接收发送到主题的消息的副本,那么它们每个都必须创建自己的主题订阅。您几乎可以将每个订阅视为由主题提供的队列。

我要举的例子是一所大学。主题是“新学生”,学院内的每个部门都希望收到一份给新学生的消息副本。因此,每个部门都有自己的订阅。会有“音乐”、“比林斯”、“科学”、“数学”订阅等等。它们每个都订阅新生主题。通过这种方式,每个部门都会收到一份新学生信息的副本,或者甚至可以根据需要过滤他们关心的事情。如果部门在处理这些消息方面落后,他们可以使用他们的订阅名称启动更多的处理器实例,从而在理论上增加他们的吞吐量,因为更多的消费者在他们的订阅中竞争消息。

因此,在您的示例中,每个应用程序都需要创建自己的订阅,或者被分配一个唯一的订阅,以便在启动时开始提取。请注意,如果您让应用程序生命周期决定订阅的生命周期(这意味着您在应用程序启动时创建订阅并在应用程序关闭时将其销毁),您需要注意如果没有活动订阅,则发送到主题的消息只会丢失。但是,您可以创建一个只接收未传递到任何其他订阅的消息的全部订阅。这实际上取决于您要完成的工作。

【讨论】:

嗨 MikeWo,谢谢你的解释。 @mikewo,当你说“如果没有活动订阅,那么发送到该主题的消息就会丢失”,这不取决于消息的生存时间吗?即使没有活动订阅,并且向主题添加了消息,如果应用程序在消息过期之前订阅了主题怎么办?它不会收到吗?谢谢你的帖子。很有帮助。 @NoelAbrahams 否。如果没有订阅并且向该主题提交了一条消息,则系统假定没有人关心并且不保留该消息。消息的到期时间是在它被传递到关心的队列/订阅时。队列或主题的消息的默认生存时间是 Timespan.MaxValue,因此理论上,如果它按照您询问的方式工作,那么它们将一直存在,直到有人订阅它们。【参考方案2】:

您要查找的不是服务总线,而是事件中心。事件中心的工作方式与您描述的完全一样,也可以通过 AMQP 访问。

【讨论】:

这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review 看不懂审稿人的意见。我遇到了与问题中概述的完全相同的问题,并且按照我在回复中的描述解决了它。我有代码来证明你是否感兴趣。您是 Service Bus 或 Event Hub 的专家,因此您对经过适当研究的答案不屑一顾吗? 格式错误恕我直言,这可能是它被标记为低质量帖子的原因。它要么是(好的)评论,要么是仅链接的答案,但没有链接,而且它们都不适合作为 SO 的答案。评论不是关于专业知识,而是赞成和反对。 很抱歉,你完全失去了我。我的帖子格式?什么链接只回答?什么赞成票或反对票?我没有做任何这些。我从谷歌得到了这个问题,我和提出这个问题的用户遇到了同样的问题。我花了一些时间才意识到这个非常常见的问题很难用服务总线解决,但用事件中心更容易解决,我分享了我在我们的产品中实际实现的观点。然后我不断收到这些样板 cmets(这不是第一次),老实说,这让我很困惑。 格式错误,您的回答没有说​​明事件中心如何解决问题,您甚至没有提供链接。您根本无法期望 SO 读者相信您的话,这可能就是您的帖子没有被投票的原因。长话短说,当你有意见时,点击评论,当你有事实时,点击答案。这些基本上就是 SO 的工作原理,但不要把我的话当作福音,而是 Take the tour,

以上是关于Azure 服务总线 - 订阅者可以独立订阅订阅并共享相同的消息?的主要内容,如果未能解决你的问题,请参考以下文章

Service Fabric Actor 订阅 Azure 服务总线主题

使用订阅的 Azure 服务总线队列

在本地测试 Azure 服务总线,无需任何订阅或登录

消息正文上的 Azure 服务总线订阅筛选器

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

每个 Web 服务器的 Azure 服务总线主题订阅