[英]Trying start RabbitListener on command after builded Application - RabbitListenerEndpointRegistry is empty
[英]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.