我正在为RabbitMQ上的队列更改一些交换,但是如果队列已经存在,我需要手动删除,那么只有spring会用更改的交换创建队列。
我们在spring rabbit中有任何选项可以根据spring文件中的队列配置删除队列。
例如:我期待兔子:deletequeue name =“a”并再次创建兔子:队列名称=“a”
因此它将删除队列,然后它将再次创建新属性,这将消除Rabbit MQ上手动删除队列。
如果我错了,请纠正我,请指导我解决方案
SRINIVAS
答案 0 :(得分:4)
您可以使用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选项创建一个队列。
答案 1 :(得分:1)
您无法通过配置执行此操作,但您可以通过设置auto-startup="false"
来阻止管理员自动声明队列。
然后,在您自己的bean中(实现SmartLifeCycle
,从Integer.MAX_VALUE
返回getPhase()
,并在start()
中使用兔子管理员删除队列。然后调用其initialize()
方法在上下文中声明所有内容。