从RabbitMQ主题交换上的* -binding中排除一条路由

时间:2016-06-02 08:40:04

标签: routing rabbitmq amqp

给出RabbitMQ topic交换,例如x1的消费者队列绑定如下:

"source": "x1",
"vhost": "rabbit",
"destination": "queue1",
"destination_type": "queue",
"routing_key": "A.*",
"arguments": {}

我现在想将一些匹配A.*的消息路由到不同的队列。例如,A.a应该转到queue2,而所有其他A.*仍然应该queue1queue2的绑定将如下所示:

"source": "x1",
"vhost": "rabbit",
"destination": "queue2",
"destination_type": "queue",
"routing_key": "A.a",
"arguments": {}

queue1的绑定应如何排除A.a,但保留其余部分?它有可能吗?

2 个答案:

答案 0 :(得分:1)

这不是topic所做的,所以如果你必须使用这种类型的交换,你就不能从绑定中排除一条路线。

您可能会发现rtopic exchange有用:

  

这个想法是能够在发布消息时指定路由模式。使用默认主题交换模式仅在将队列绑定到交换时才接受。

答案 1 :(得分:0)

AFAIK你不能通过说“不是这个”或类似的东西来制作路由密钥。

要实现您想要的功能,您可以尝试一些解决方法:将一个大的预取计数设置为queue 2使用者,并确保该消费者是第一个连接到代理的消费者(因为圆形罗宾派遣)。您必须弄清楚要将预取计数设置为什么。

当然,有很多原因导致这种情况不能始终发挥作用(如果消费者下降,或者太慢等等......)