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。
我们在基于 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。