【问题标题】:RabbitMQ - 2 exchanges sending messages to the same queueRabbitMQ - 2 交换发送消息到同一个队列
【发布时间】:2016-08-13 01:46:45
【问题描述】:

我有具有 2 个独立实例(p1、p2)的生产者应用和具有 2 个独立实例(c1、c2)的消费者应用。

生产者 p1 与 topic= t1, queueName =name1 连接交换。

消费者c1连接到exchange,topic=t1,queueName=name1

生产者 p2 与 topic= t2, queueName =name1 连接交换。

消费者c2连接到exchange,topic=t2,queueName=name1

我在 RabbitMQ GUI 中看到我有 2 个交换但只有 1 个队列。 相反,c1 将只接收来自 p1 的消息,而 c2 将只接收来自 p2 的消息,RabbitMQ 正在对 c1 和 c2 之间的消息进行循环。所以我从 p2 发送的消息正在被 c1 和 c2 接收。

我认为在 RabbitMQ 中,相关性是每个交换有多个队列,这里的行为是出乎意料的。为什么?

【问题讨论】:

    标签: rabbitmq rabbitmq-exchange


    【解决方案1】:

    每个交换都可以有多个队列,这是真的;但是路由键是队列问题,而不是消费者问题。

    rabbit 将使用路由键将消息发送到正确的队列;一旦在主题交换中接收到消息,该消息将被发送到绑定到该特定主题的所有队列。你这里只有一个队列,这就是 C1 和 C2 都收到消息的原因。

    查看this 链接以获得明确的示例。

    如果需要分离 C1 和 C2,则需要将它们绑定到 2 个不同的队列,而不是同一个。

    【讨论】:

    • 在这个图中只有 1 个生产者,我有 2 个生产者和 2 个交易所。如果您从不同的方面看我的问题,我有一个消费者接收来自 2 个生产者的请求。怎么可能?
    • 因为您为两个消费者使用相同的队列;如果您有两个交换器绑定到同一个队列,那么无论谁生成消息,它都会被发送到队列“queueName =name1”,并且您的两个消费者都会看到它。
    猜你喜欢
    • 1970-01-01
    • 2023-01-19
    • 2016-06-19
    • 2011-12-29
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多