繁体   English   中英

SpringBoot Application启动后启动@RabbitListener

[英]Start @RabbitListener after SpringBoot Application is started

我们在 Spring 引导应用程序中实现了 rabbitMq。 这就是我们定义监听器的方式。 但是每当我们启动应用程序并且队列中有消息时,这些消息的消耗就会在应用程序完全启动之前开始。

@Component
@RabbitListener(queues = "hello")
public class RabbitMqReceiver {

我只想在服务器启动后启动监听器。

即使组件已启动,如果您不想处理消息,您也可以设置一个标志以等到应用程序初始化后再开始处理:

https://www.baeldung.com/running-setup-logic-on-startup-in-spring

您可以将侦听器的autoStartup属性设置为 false,这样它就不会自动启动。 然后,您可以在准备好时启动(然后停止)它。

使用RabbitListenerEndpointRegistry获取对侦听器容器的引用。

@RabbitListener(id = "foo". ..., autoStartup = "false")

...

@Autowired
RabbitListenerEndpointRegistry registry;

...

registry.getListenerContainer("foo").start();

请参阅参考手册

容器管理为注解创建的容器未在应用程序上下文中注册。 您可以通过在RabbitListenerEndpointRegistry bean 上调用getListenerContainers()来获取所有容器的集合。 然后,您可以遍历此集合,例如,停止或启动所有容器或调用注册表本身的 Lifecycle 方法,这将调用每个容器上的操作。

您还可以使用其 id 获取对单个容器的引用,使用 getListenerContainer(String id) - 例如, registry.getListenerContainer("multi")用于由上面的代码片段创建的容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM