AMQP中的消息路由

时间:2011-06-08 19:37:15

标签: python rabbitmq amqp pika

我想用AMQP做一些路由魔术。我的设置是消费者/生产者方面的Pika和针对AMQP服务器的RabbitMQ。

我想要实现的目标:

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

    • 一组订阅者应该能够根据路由密钥进行检索
    • 一组订阅者应该只收到所有邮件。

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

  4. 这可以通过单个basic_publish调用实现,还是需要将消息发送到路由交换机(对于第一组消费者)到“全局”交换机第二组消费者?

      

    澄清:

         

    我想要实现的是一个单一的   打电话发布消息并拥有它   收到了2套不同的   消费者。

         

    案例1 :只接收基于路由密钥的消息(即   路由密钥为foo的邮件将是   得到了所有消费者的好评   目前对该主题感兴趣)

         

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

         

    仍然是对某个人感兴趣的消费者收到的消息   路由密钥应与生成的工作人员收到的消息完全相同   通过单个API调用。

    (希望我的问题有道理,我对AMQP条款不太熟悉)

1 个答案:

答案 0 :(得分:1)

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

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

对于案例2 ,只需创建一个路由密钥为#的单个队列,并让每个工作者消费者都使用该队列。经纪人将以循环方式向工人发送。

以下是RabbitMQ中的内容截图。在这个例子中,你的“案例1”(Foo和Bar)有两个消费者,所有工人都有一个队列来满足“案例2”。

enter image description here

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

相关问题