启动SpringBoot应用程序后,启动@RabbitListener

时间:2020-05-21 14:24:44

标签: java spring-boot spring-rabbitmq

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

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

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

2 个答案:

答案 0 :(得分:1)

即使启动了组件,也不需要处理消息,也可以设置标志以等待应用程序初始化以开始处理,然后:

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

答案 1 :(得分:1)

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

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

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

...

@Autowired
RabbitListenerEndpointRegistry registry;

...

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

请参见the reference manual

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

您还可以通过使用单个容器的ID,以及使用getListenerContainer(String id)获得对单个容器的引用,例如,registry.getListenerContainer("multi")用于上面的代码段创建的容器。

相关问题