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
用于删除。
有没有办法使用 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
用于删除。