容器管理
为注解创建的容器不会注册到应用上下文中。你可以通过在 RabbitListenerEndpointRegistry bean 上调用 getListenerContainers() 来获取所有容器的集合。然后你可以遍历这个集合,例如停止或启动所有容器,或者在 registry 本身上调用 Lifecycle 方法,这将对每个容器执行相应操作。
你还可以使用容器的 id,通过 getListenerContainer(String id) 获取单个容器的引用——例如,对上面代码片段创建的容器使用 registry.getListenerContainer("multi")。
从 1.5.2 版开始,你可以用 getListenerContainerIds() 获取已注册容器的 id 值。
从 1.5 版开始,你现在可以在 RabbitListener 端点上为容器指定一个 group。这提供了一种获取容器子集引用的机制。添加 group 属性会导致一个类型为 Collection<MessageListenerContainer> 的 bean 以该组名注册到上下文中。
默认情况下,停止一个容器会取消消费者,并在停止之前处理所有已预取的消息。从 2.4.14、3.0.6 版开始,你可以将 forceStop 容器属性设为 true,以便在当前消息处理完成后立即停止,从而使所有已预取的消息重新入队。例如,在使用排他或单活跃消费者时,这会很有用。