1

我有一个主题交换,我想从中将消息分发到集群的两台服务器上的两个队列,以减少任何特定服务器上的内存压力。我的消费者周期性地变慢,我有时会遇到高内存水印。

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

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

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

我发现使用 RabbitMQ 进行选择性路由,这可能意味着我需要实现自己的路由逻辑。希望这已经存在于其他地方。

4

1 回答 1

4

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

如果您设置了两个铲子,它们都从直接中间交换的单个队列中消耗,它们应该能够争夺传入的消息(我假设您不会太在意两个接收队列不' t 以严格的循环方式获取传入消息)。然后,铲子各自发布到两个端队列之一,并可以通过来自最终消费者的 ACK 发送。

于 2012-09-10T17:39:17.847 回答