【问题标题】:Excluding one route from a *-binding on a RabbitMQ topic exchange从 RabbitMQ 主题交换的 *-binding 中排除一条路由
【发布时间】:2016-06-02 17:27:31
【问题描述】:

给定一个 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 而保留其余部分?有可能吗?

【问题讨论】:

    标签: routing rabbitmq amqp


    【解决方案1】:

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

    您可能会发现rtopic exchange 很有用:

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

    【讨论】:

    • 为了限制更改,我会坚持主题交换并明确列出所有绑定,但这是对未来的一个非常好的提示。
    【解决方案2】:

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

    要实现您想要的,您可以尝试一些解决方法:将较大的预取计数设置为 queue 2 消费者,并确保该消费者是第一个连接到代理的(因为循环调度)。您必须弄清楚将预取计数设置为什么。

    当然,这并非总是有效的原因有很多(如果消费者掉线,或者太慢等...)

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 2012-06-30
      • 2014-07-09
      • 2021-12-27
      • 2013-03-07
      • 2018-08-14
      相关资源
      最近更新 更多