1

我正在为 RabbitMQ 上的队列更改一些交换,但如果队列已经存在,我需要手动删除,那么只有 spring 会使用更改的交换创建队列。

我们在 spring rabbit 中是否有任何选项可以根据 spring 文件中的队列配置删除队列。

例如:我期待 rabbit:deletequeue name="a" 并再次创建 rabbit:queue name="a"

因此它将删除队列,然后使用新属性再次创建,这将消除在 Rabbit MQ 上手动删除队列。

如果我错了,请纠正我,否则请指导我解决方案

斯里尼瓦斯

4

2 回答 2

5

您可以使用 AmqpAdmin 来完成

3.8 http://docs.spring.io/spring-amqp/reference/html/amqp.html

public interface AmqpAdmin {

    // Exchange Operations

    void declareExchange(Exchange exchange);

    void deleteExchange(String exchangeName);

    // Queue Operations

    Queue declareQueue();

    String declareQueue(Queue queue);

    void deleteQueue(String queueName);

    void deleteQueue(String queueName, boolean unused, boolean empty);

    void purgeQueue(String queueName, boolean noWait);

    // Binding Operations

    void declareBinding(Binding binding);

    void removeBinding(Binding binding);

    Properties getQueueProperties(String queueName);
}

或者只是创建一个带有 autoDelete 选项的队列。

于 2014-07-29T04:38:45.710 回答
1

你不能通过配置来做到这一点,但是你可以通过设置来阻止管理员自动声明队列auto-startup="false"

然后,在您自己的 bean 中(实现、SmartLifeCycle返回Integer.MAX_VALUE并使用 rabbit admin 删除队列。然后调用它的方法来声明上下文中的所有内容。getPhase()start()initialize()

于 2014-07-29T14:35:23.913 回答