[英]Message Routing in AMQP
我想用 AMQP 做一些路由魔术。 我的设置是 Python,Pika 在消费者/生产者端,RabbitMQ 用于 AMQP 服务器。
我想达到的目标:
像这样消费消息:
一组订阅者应该只收到所有消息。
棘手的部分是,如果第二组中的任何服务器已收到消息,则第二组中的其他服务器将不会收到该消息。 第一组中的所有服务器应该仍然能够使用此消息。
这是否可以通过单个basic_publish
调用实现,或者我是否需要将消息发送到路由交换(对于第一组消费者)和发送到第二组消费者的“全局”交换?
澄清:
我想要实现的是一次调用来发布一条消息并让它被 2 组不同的消费者接收。
案例1 :只接收基于路由键的消息(即所有当前对该主题感兴趣的消费者都会收到带有路由键
foo
的消息)案例 2 :这基本上类似于RabbitMQ 工作队列教程。 有许多工人将接收以循环方式发送的消息。 只有一个工人会收到一条消息
仍然对某个路由键感兴趣的消费者收到的消息应该与工作人员收到的消息完全相同,由单个 API 调用产生。
(希望我的问题有意义我不太熟悉 AMQP 术语)
首先,您需要使用topic
交换并为每个队列使用不同的路由键发布消息。 当消费者使用绑定键(或要匹配的模式)绑定队列时,魔法就会发生。 一些消费者只是使用路由键作为他们的绑定键。 但是第二组将使用通配符模式作为它们的绑定键。
对于案例 1 ,您需要为每个消费者创建一个队列,并将每个队列与适当的路由键绑定。
对于案例 2 ,只需创建一个路由键为#
的队列,并让您的每个工作人员消费者从中消费。 经纪人将以循环方式向工人派遣。
这是 RabbitMQ 中的屏幕截图。 在此示例中,您的“案例 1”(Foo 和 Bar)中有两个消费者和一个队列供所有工作人员满足“案例 2”。
此 model 应受所有符合 AMQP 的代理支持,并且不需要任何特定于供应商的增强功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.