消息总线和消息队列理解

5
我希望知道我对消息总线和消息队列的理解是否正确。
首先,需要澄清命名问题:服务总线与消息总线可以互换使用吗?它是一种发布-订阅类型的系统,让任意数量的发布者将消息添加到消息集合中,任意数量的订阅者可以从中读取,到目前为止我的理解是正确的吗?
P1 ---                                         /``````S1
       \________ Service Bus Middleware ------+------ S2
       /           MESSAGE-COLLECTION          \______S3
P2 ---

我不理解的是:

  1. 订阅者如何知道它感兴趣的消息是什么,我的意思是,它显然会订阅它,但它如何知道应该订阅哪个消息或哪些消息? 它在哪里看到消息列表?这是通过API还是其他方式提供给它的?

  2. 订阅者如何接收消息?

  3. 消息何时从MESSAGE-COLLECTION中删除? 我可以想象,每条消息都保留有一个计数器,该计数器表示成功处理消息的订阅者总数,每当一个订阅者成功处理该消息时,计数器就会递减。

消息队列(也称为消息代理)是一种推拉类型的系统。它有任意数量的生产者和消费者。每个生产者为每个消费者创建一个队列,向其提供消息。

             --- Message Queue 1 ---- C1
           /  
P1 ------ +
           \ 
             --- Message Queue 2 ---- C2


P2 ------ + --- Message Queue 1 ---- C1

既然这种情况下,只要消息被消费者成功处理了,它就会被删除。我的消息队列理解是否正确?

另一个概念是事件中心,我不确定它到底是什么。


订阅者如何知道它感兴趣的消息是什么?请阅读有关主题和“规则”的内容。了解更多信息,请访问:https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptions#rules-and-actions - granadaCoder
2个回答

3
我想知道我对消息总线和消息队列的理解是否正确。
一些注释/答案。这不会是全面的,因为许多方面是具体到使用的队列的。
服务总线与消息总线可以互换使用?
正确。服务总线是用于面向服务的解决方案中的消息总线基础架构,为服务之间提供后端数据传输机制。
这是一种发布-订阅类型的系统,其中任何数量的发布者将消息添加到消息集合中,任何数量的订阅者都可以从中读取。
通常有两种模式: 1. 发布/订阅,其中发布者将数据发送到总线而没有特定的目标。然后一个或多个订阅者可以消耗消息(或不消耗,见下文)。 2. 请求/响应,其中发送者将数据发送到总线,但期望特定的接收者处理消息并返回响应。
订阅者如何知道它感兴趣的消息是什么...?
大多数服务总线实现使用路由键的概念。每个发送到总线的数据实体都附带一个键,订阅者可以通过该键进行过滤。
当然,订阅者也可以选择获取发布到特定队列的所有消息。
这在服务队列产品中因实现而异。例如,在RabbitMQ中,API将消息传递给订阅者,而在Kafka中,客户端必须定期轮询服务器以获取消息。
有时根本不删除消息。这也因产品和配置而异。有时仅将消息传递给一个接收者并在确认交付后删除,但有时会将消息留在总线上,直到它们基于时间戳过期。许多情况是可能的。

0

我知道这个问题已经有答案了,但这是我理解一些概念所做的事情,我建议通过实际编码来练习。例如,通过从官方页面上做rabbitmq教程
例如,对于你的问题:

订阅者如何知道它感兴趣的消息是什么,我的意思是它显然订阅了它,但它如何知道应该订阅哪些消息?

您可以在教程N°5中找到答案,他们解释了如何为特定主题过滤消息,...
最好的部分是,只需使用终端和IDE玩耍,您就可以模拟多种场景,例如:

  • 当您添加更多工作程序时会发生什么(只需添加另一个终端)
  • 如果服务器(发布者或消费者)关闭会发生什么(关闭发布者终端)
  • 如何将您的消息(内存中)保存以避免丢失,并选择要保存的消息类别
  • 还有很多其他的,......祝您编码愉快 :)

回答问题比推销教育资料网站更好。 - Bill

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