1

我想用 AMQP 做一些路由魔术。我的设置是 Python 与 Pika 在消费者/生产者端和 RabbitMQ 用于 AMQP 服务器。

我想达到的目标:

  1. 向单个交换机发送消息
  2. (在这里插入魔法)
  3. 像这样消费消息:

    • 一组订阅者应该能够根据路由键进行检索
    • 一组订阅者应该只收到所有消息。

      棘手的部分是,如果第二组中的任何服务器已收到消息,则第二组中的其他服务器将不会收到该消息。第一组中的所有服务器应该仍然能够使用此消息。

这是否可以通过单个basic_publish呼叫实现,或者我是否需要将消息发送到路由交换(对于第一组消费者)并发送到第二组消费者“全局”交换?

澄清:

我想要实现的是一次调用来发布一条消息并让它被 2 组不同的消费者接收。

案例1:只接收基于路由键的消息(即带有路由键的消息foo将被当前对该主题感兴趣的所有消费者接收)

案例 2:这基本上类似于RabbitMQ Tutorial for Worker Queues。有许多工人将接收以循环方式发送的消息。只有一个工人会收到一条消息

尽管如此,对某个路由密钥感兴趣的消费者收到的消息应该与工作人员收到的消息完全相同,由单个 API 调用产生。

(希望我的问题有意义我不太熟悉 AMQP 术语)

4

1 回答 1

1

首先,您需要使用topic交换器并为每个队列使用不同的路由键发布消息。当消费者使用绑定键(或要匹配的模式)绑定队列时,魔法就会发生。一些消费者只是使用路由键作为他们的绑定键。但是第二组将使用通配符模式作为它们的绑定键。

对于案例 1,您需要为每个消费者创建一个队列,并将每个队列与适当的路由键绑定。

对于案例 2,只需创建一个带有路由键的队列,#并让您​​的每个工作人员消费者从中消费。经纪人将以循环方式向工人派遣。

这是 RabbitMQ 中的截图。在此示例中,您的“案例 1”(Foo 和 Bar)中有两个消费者和一个队列供所有工作人员满足“案例 2”。

在此处输入图像描述

所有符合 AMQP 的代理都应支持此模型,并且不需要任何特定于供应商的增强功能。

于 2011-06-10T14:53:02.690 回答