我想用AMQP做一些路由魔术。我的设置是消费者/生产者方面的Pika和针对AMQP服务器的RabbitMQ。
我想要实现的目标:
消费这样的消息:
一组订阅者应该只收到所有邮件。
棘手的部分是,如果第二组中的任何服务器已收到消息,则第二组中的其他服务器将不会收到该消息。第一组中的所有服务器仍然可以使用此消息。
这可以通过单个basic_publish
调用实现,还是需要将消息发送到路由交换机(对于第一组消费者)和到“全局”交换机第二组消费者?
澄清:
我想要实现的是一个单一的 打电话发布消息并拥有它 收到了2套不同的 消费者。
案例1 :只接收基于路由密钥的消息(即 路由密钥为
foo
的邮件将是 得到了所有消费者的好评 目前对该主题感兴趣)案例2 :这基本上类似于RabbitMQ Tutorial for Worker Queues。 有一些工人 将收到一个发送的消息 循环方式。只有一名工作人员会收到一条消息
仍然是对某个人感兴趣的消费者收到的消息 路由密钥应与生成的工作人员收到的消息完全相同 通过单个API调用。
(希望我的问题有道理,我对AMQP条款不太熟悉)
答案 0 :(得分:1)
首先,您需要使用topic
交换并使用不同的路由密钥为每个队列发布消息。当消费者用绑定密钥(或要匹配的模式)绑定队列时,就会发生魔术。有些消费者只使用路由密钥作为绑定密钥。但第二组将使用通配符模式作为绑定密钥。
对于案例1 ,您需要为每个使用者创建一个队列,并使用适当的路由键绑定每个队列。
对于案例2 ,只需创建一个路由密钥为#
的单个队列,并让每个工作者消费者都使用该队列。经纪人将以循环方式向工人发送。
以下是RabbitMQ中的内容截图。在这个例子中,你的“案例1”(Foo和Bar)有两个消费者,所有工人都有一个队列来满足“案例2”。
所有符合AMQP标准的经纪商都应支持此模型,并且不需要任何特定于供应商的增强功能。