Spring AMQP:删除旧的绑定和队列

Spring AMQP: remove old bindings and queues

我正在使用 Spring AMQP 和 Spring 引导 @Configuration@Bean 注释来创建所有必需的队列、交换和绑定。

@Bean
public Queue queue() {
    return new Queue("my_old_queue", true, false, false);
}

@Bean
public Exchange exchange() {
    return new DirectExchange("MY_OLD_EXCHANGE");
}

@Bean
public Binding binding() {
    return BindingBuilder.bind(queue())
                         .to(exchange())
                         .with("old_binding")
                         .noargs();
}

但是我遇到了升级拓扑的问题:

  1. 我想添加一个新的queue/binding/exchange
  2. 并删除旧的 queue/binding/exchange(即使它是持久实体)。

是否存在用于删除或解除绑定的注释(如 @Unbind)? 我已经看到 其中 RabbitManagementTemplate 被建议,但这是一种完全不同的配置方式 - 我想将所有内容保存在单个 @Configuration class 中并仅使用注释或配置 bean(可能吗?)。 creating/removing 和更新 rabbit 拓扑是否存在一些通用模式(也许我错过了什么)?

您不能删除带有注释或配置的实体,请使用 RabbitAdmin.delete*() 方法删除它们,就像在该答案中一样 - 管理模板用于列出绑定,RabbitAdminamqpAdmin) 进行删除。