监听器容器队列

版本 1.3 引入了多项改进,用于在监听器容器中处理多个队列。

容器最初可以配置为监听零个队列。 队列可以在运行时添加和删除。 SimpleMessageListenerContainer 在处理完任何预取消息后,会回收(取消并重新创建)所有消费者。 DirectMessageListenerContainer 为每个队列创建/取消单个消费者,而不会影响其他队列上的消费者。 请参阅 {spring-amqp-java-docs}/rabbit/listener/AbstractMessageListenerContainer.html[Javadoc] 中 addQueuesaddQueueNamesremoveQueuesremoveQueueNames 方法的说明。

如果并非所有队列都可用,容器会每隔 60 秒尝试被动声明(并从)缺失的队列进行消费。

此外,如果消费者从代理接收到取消(例如,如果队列被删除),消费者会尝试恢复,并且恢复的消费者会继续处理来自任何其他配置队列的消息。 以前,一个队列上的取消会取消整个消费者,最终容器会因为缺失的队列而停止。

如果您希望永久删除一个队列,您应该在删除队列之前或之后更新容器,以避免未来尝试从该队列消费。