Spring amqp:删除特定队列的所有绑定

Spring amqp: Remove all bindings for specific queue

有没有办法使用 spring-amqp 删除特定队列的所有绑定?

有一个解决方法,先删除一个队列,然后重新声明它

amqpAdmin.deleteQueue("testQueue");
amqpAdmin.declareQueue(new Queue("testQueue"));

但这是一个非常丑陋的解决方案,我想避免它

您可以使用 REST API 列出绑定,并使用 amqpAdmin.removeBinding() 列出您要删除的绑定。

编辑

这是使用 Java 8 Stream 的代码 - 如果您不使用 Java 8...[=16,您可以通过遍历列表来做同样的事情=]

RabbitManagementTemplate rmt = new RabbitManagementTemplate("http://localhost:15672/api/", "guest", "guest");
rmt.getBindings().stream()
    .filter(b -> b.getDestination().equals("q1") && b.isDestinationQueue())
    .forEach(b -> {
        System.out.println("Deleting " + b);
        amqpAdmin.removeBinding(b);
    });

结果:

Deleting Binding [destination=q1, exchange=, routingKey=q1]
Deleting Binding [destination=q1, exchange=ex1, routingKey=foo]
Deleting Binding [destination=q1, exchange=ex2, routingKey=foo]

(当 q1 绑定到默认交易所和其他 2 个时)。

RabbitAdmin amqpAdmin 用于删除。