我们在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();
容器管理为注释创建的容器未在应用程序上下文中注册。您可以通过在
getListenerContainers()
bean上调用RabbitListenerEndpointRegistry
获得所有容器的集合。然后,您可以遍历此集合,例如,停止或启动所有容器或在注册表本身上调用Lifecycle方法,这将在每个容器上调用操作。[您还可以通过使用单个容器的ID,以及使用getListenerContainer(String id)get获得对单个容器的引用,例如,对于由上述代码段创建的容器,例如为
registry.getListenerContainer("multi")
。