【问题标题】:Spring amqp: Remove all bindings for specific queueSpring amqp:删除特定队列的所有绑定
【发布时间】:2022-03-21 21:17:30
【问题描述】:

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

有个变通办法,先删除一个队列,然后重新声明

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

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

【问题讨论】:

    标签: spring rabbitmq message-queue amqp spring-amqp


    【解决方案1】:

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

    编辑

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

    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 用于执行删除操作。

    【讨论】:

    • 我需要删除特定队列的所有绑定,不知道哪些绑定与队列相关
    • 这是一个可靠的答案,尽管它不依赖于 AMQP 协议。我交替使用 qpid 和 rabbitmq,所以我必须为 qpid 编写不同的实现。感谢您的帮助。
    • amqp 协议 (0.9.1) 没有列出绑定的命令(方法)。
    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 2013-11-22
    • 2021-09-18
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多