将消息路由到一个且只有一个队列

时间:2012-09-04 15:14:45

标签: rabbitmq amqp

我有一个主题交换,我希望将消息分发到群集的两个服务器上的两个队列,以减少任何特定服务器上的内存压力。我的消费者经常变慢,我有时会遇到高记忆水印。

我尝试解决此问题的方法是使用中间直接交换路由消息,并将两个队列绑定到交换:

a (topic) -> a1 (direct) -> q1/q2 (bound to routing key "a")

但是消息被路由到两个队列,正如AMQP所打算的那样。有人有想法吗?我需要的是一个路由到一个且只有一个队列的交换机,即使路由密钥与许多队列匹配。我不想改变我的路由键,但可以安排。

我找到Selective routing with RabbitMQ,这可能意味着我需要实现自己的路由逻辑。希望这已经存在于其他地方。

1 个答案:

答案 0 :(得分:4)

您也许可以使用Shovel插件 - http://www.rabbitmq.com/shovel.html - 将消息从中间交换机移动到两个队列。

如果你设置了两把铲子,都是在直接中间交换的单一队列中消耗的,他们应该能够对进来的消息进行争夺(我假设如果两个接收者你不太在意队列不会以严格的循环方式获取传入的消息。然后铲子每个都发布到两个结束队列中的一个,并且可以通过最终消费者的ACK发送。