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

问题描述 投票:0回答:2

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

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

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

java spring-boot spring-rabbitmq
2个回答
0
投票

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

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


0
投票

您可以将侦听器的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)get获得对单个容器的引用,例如,对于由上述代码段创建的容器,例如为registry.getListenerContainer("multi")

© www.soinside.com 2019 - 2024. All rights reserved.