Spring AMQP ListenerContainer 生命周期管理

Spring AMQP ListenerContainer lifecycle management

我们在基于 Spring 的 Web 应用程序中使用 Spring AMQP 连接到 RabbitMQ。

当我们在应用程序上下文中将侦听器容器声明为 beans(使用 rabbit:listener-container)时,它们的生命周期由 Spring.

管理

如果我们在 @PostConstruct 方法内的组件中声明一个侦听器容器,或者我们使用 class org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer 创建一个 bean 作为原型作用域 bean,那么我们必须管理生命周期,即我们自己启动和停止侦听器容器。

我的问题是,如果我们在 @PostConstruct 方法中声明新的队列、绑定和侦听器容器,只需在相应的 @PreDestroy 方法中调用 listener.stop/shutdown/destroy 方法就足够了优雅关机?否则我需要做什么?

注意:我想我不必为 @PostContruct 中创建的新队列和绑定做任何事情,但如果您也为我确认这一点,我将非常高兴。

我不建议启动侦听器容器或在 @PostConstruct 方法中声明 queues/bindings;当时的上下文只是半生不熟。它可能有效,但不建议在初始化上下文时执行类似的操作。

最好在 start()/stop() 方法中实现 SmartLifecycle 和 start/stop 它们。

然后,容器生命周期将由 spring 上下文间接管理。

您还可以通过将 bean 置于一个阶段来精确控制 bean 何时 started/stopped。