architecture - 消息总线和消息队列理解

标签 architecture message-queue servicebus distributed-system message-bus

我想知道我对消息总线和消息队列工作的理解是否正确。

首先,我需要清除命名,一个服务巴士可与 互换使用消息总线 ?它是一种发布者 - 订阅者类型的系统,其中添加了消息,让我们说任意数量的发布者可以从其中读取任意数量的订阅者的消息集合,到目前为止我是对的吗?

P1 ---                                         /``````S1
       \________ Service Bus Middleware ------+------ S2
       /           MESSAGE-COLLECTION          \______S3
P2 ---

我不明白的是
  • 订阅者如何知道它对什么消息感兴趣,我的意思是它显然订阅了它,但它如何知道它应该订阅哪些消息?,它在哪里看到消息列表,它如何可用?通过 API 或如何?
  • 订阅者如何接收消息?
  • 何时从 MESSAGE-COLLECTION 中删除消息?我可以想象的是,为每条消息保留了一些计数器,该计数器表示订阅者的总数,一旦一个订阅者成功处理了该消息,该总数就会减少。

  • A 消息队列也称为 消息代理是一种推挽式系统。有任意数量的生产者和任意数量的消费者。每个生产者为每个消费者创建一个队列,它向其提供消息。
                 --- Message Queue 1 ---- C1
               /  
    P1 ------ +
               \ 
                 --- Message Queue 2 ---- C2
    
    
    P2 ------ + --- Message Queue 1 ---- C1
    

    由于是这种情况,一旦消费者成功处理消息,消息就会被删除。是我的 消息队列对其工作原理的理解正确吗?

    另一个我不确定到底是做什么的概念是 事件中心 .

    最佳答案

    I would like to know if my understanding of Message Bus and Message Queue workings is correct.



    一些评论/答案。这不会很全面,因为许多方面都特定于正在使用的队列。

    a service bus is used interchangeably with message bus?



    对。服务总线是面向服务的解决方案中使用的消息总线基础设施,提供服务之间的后端数据传输机制。

    It is a publisher-subscriber type of system where messages are added let's say to a message collection by any number of publishers and from where any number of subscribers can read



    一般有两种型号:

    1) 发布/订阅,发布者在没有特定目标的情况下将数据发送到总线。然后,一个或多个订阅者可以消费该消息(或不消费,见下文)。

    2) 请求/响应,发送方将数据发送到总线,但期望接收到的特定消息来处理消息并返回响应。

    how does a subscriber know what message it is interested in...?



    大多数服务总线实现使用路由键的概念。发送到总线的每个数据实体都附带一个 key ,然后订阅者可以通过该 key 进行过滤。

    当然,订阅者也可以选择将所有消息发布到特定队列。

    How does the subscriber receives the message ?



    这因服务队列产品而异。例如,在 RabbitMQ 中,消息通过 API 传递给订阅者,而在 Kafka 中,客户端必须定期轮询服务器以获取消息。

    when is a message removed from MESSAGE-COLLECTION?



    有时根本没有。这也因产品和配置而异。有时一条消息只传递给一个接收者,一旦确认传递就被删除,但有时消息会留在总线上,直到它们根据时间戳过期。许多场景都是可能的。

    关于architecture - 消息总线和消息队列理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57345003/

    相关文章:

    c++ - 处理跨平台用户认证和授权的策略

    java - 带队列的 ZeroMQ 无代理网络 (Java)

    azure - 如何根据逻辑应用程序中的条件将主题名称作为参数传递?

    android - Android 应用程序中的设计建议

    architecture - 在实现任何代码之前评估设计的任何好方法?

    mysql - 数据库中的库存架构

    rabbitmq - 消息、队列和交换器有哪些限制?

    c - IPC 在 C : Error in receiving 中使用消息队列

    amazon-ec2 - 连接到 AWS 上的 Windows Server 服务总线

    c# - 有没有办法登记 Azure 服务总线中所有队列的所有消息并将它们存储在 json 中?