Rabbitmq 将消息路由到一个且仅限于一个队列

Rabbitmq 将消息路由到一个且仅限于一个队列,rabbitmq,amqp,Rabbitmq,Amqp,我有一个主题交换,我想从中将消息分发到集群中两台服务器上的两个队列,以减少任何特定服务器上的内存压力。我的消费者周期性地变慢,有时会遇到高内存水印 我试图解决这一问题的方法是使用中间直接交换路由消息,并将两个队列绑定到交换: a (topic) -> a1 (direct) -> q1/q2 (bound to routing key "a") 但是消息被路由到两个队列,正如AMQP所希望的那样。有人有想法吗?我需要的是一个只路由到一个队列的交换,即使路由密钥匹配多个队列。我不想更

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

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

a (topic) -> a1 (direct) -> q1/q2 (bound to routing key "a")
但是消息被路由到两个队列,正如AMQP所希望的那样。有人有想法吗?我需要的是一个只路由到一个队列的交换,即使路由密钥匹配多个队列。我不想更改路由密钥,但可以安排


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

您可以使用Spoot插件将消息从中间交换移动到两个队列


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

您可以使用铲子插件--将消息从中间交换机移动到两个队列

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