我们的Spring启动应用程序中有RabbitMq实现。这就是我们定义监听器的方式。但是,只要我们启动应用程序并且队列中有消息,就会在应用程序完全启动之前开始消耗这些消息。
@Component
@RabbitListener(queues = "hello")
public class RabbitMqReceiver {
我只想在服务器启动后启动侦听器。
答案 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();
容器管理 为注释创建的容器未在应用程序上下文中注册。您可以通过在
getListenerContainers()
bean上调用RabbitListenerEndpointRegistry
获得所有容器的集合。然后,您可以遍历此集合,例如,停止或启动所有容器,或者在注册表本身上调用Lifecycle方法,这将在每个容器上调用操作。您还可以通过使用单个容器的ID,以及使用getListenerContainer(String id)获得对单个容器的引用,例如,
registry.getListenerContainer("multi")
用于上面的代码段创建的容器。