我目前正在开发一个rabbit-amqp实现项目,并使用spring-rabbit以编程方式设置我的所有队列,绑定和交换 .
我正在尝试重新创建队列,如果它被删除,并在参考文档中找到以下内容:
3.14侦听器容器队列版本1.3引入了许多用于处理侦听器容器中的多个队列的改进 . 必须将容器配置为侦听至少一个队列;之前的情况也是如此,但现在可以在运行时添加和删除队列 . 当处理完任何预先获取的消息时,容器将回收(取消并重新创建)消费者 . 请参阅方法addQueues,addQueueNames,removeQueues和removeQueueNames . 删除队列时,必须至少保留一个队列 . 如果任何队列可用,则消费者现在将启动 - 如果任何队列不可用,则先前容器将停止 . 现在,只有当没有队列可用时才会出现这种情况 . 如果并非所有队列都可用,则容器将尝试每60秒被动地声明(并从中消耗)丢失的队列 . ...(来源:http://docs.spring.io/spring-amqp/docs/1.3.4.RELEASE/reference/html在撰写本文时失败了)
我尝试了这个场景,确实重新创建了我的队列,但是队列和交换之间的绑定都丢失了 . 如何在删除绑定后重新创建队列?
1 回答
实际上,如果所有声明(
Queue
,Exchange
,Binding
)都被注册为bean,它应该可以工作 .在每个
queuesChanged()
SimpleMessageListenerContainer
调用rabbitAdmin.initialize()
,反过来,他们处理提到的RabbitMQ环境 .它只发生在这种情况下:
如果应用程序上下文中的
Queue
包含在当前queueNames
中,则它是auto-delete
并且它在Broker(rabbitAdmin.getQueueProperties
)上不存在尝试连接到Broker以获取有关Queue
的信息 .UPDATE
当然,当没有消费者时,
queue
被删除了 .关于
x-expires
(Queue TTL)看起来你是对的,我们也应该处理这个问题:随意提出JIRA问题:https://jira.spring.io/browse/AMQP
谢谢你指出来 - 1