我们正在使用Spring AMQP连接到基于Spring的Web应用程序中的RabbitMQ。
当我们在应用程序上下文中将侦听器容器声明为bean(使用@PostConstruct
)时,它们的生命周期由Spring管理。
如果我们在org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer
方法内的组件中声明一个侦听器容器,或者我们创建一个类@PostConstruct
作为原型范围bean的bean,那么我们必须管理生命周期,即启动和自己停止听众容器。
我的问题是,如果我们在listener.stop/shutdown/destroy
方法中声明新的队列,绑定和侦听器容器,只需在相应的@PreDestroy
方法中调用@PostContruct
方法就足够优雅了关掉?或者我需要做什么?
注意:我猜我不需要为<div id="swiffycontainer" style="width: 100%; height: auto;">
</div>
中创建的新队列和绑定做任何事情,但如果您也为我确认这一点,我将非常高兴。
答案 0 :(得分:1)
我不建议在@PostConstruct
方法中启动侦听器容器或声明队列/绑定;当时的背景只是半生不熟。它可能有用,但在初始化上下文时不建议做类似的事情。
最好在SmartLifecycle
方法中实施start()/stop()
并启动/停止它们。
然后,容器生命周期将由spring上下文间接管理。
您还可以通过将bean置于阶段来准确控制bean的启动/停止时间。