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

Pan*_*arg 2 java spring-rabbit spring-boot

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

@Component
@RabbitListener(queues = "hello")
public class RabbitMqReceiver {
Run Code Online (Sandbox Code Playgroud)

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

Gar*_*ell 7

您可以将autoStartup侦听器的属性设置为 false,这样它就不会自动启动。然后,您可以在准备好后启动(并稍后停止)它。

\n\n

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

\n\n
@RabbitListener(id = "foo". ..., autoStartup = "false")\n\n...\n\n@Autowired\nRabbitListenerEndpointRegistry registry;\n\n...\n\nregistry.getListenerContainer("foo").start();\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅参考手册

\n\n
\n

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

\n\n

registry.getListenerContainer("multi")您还可以通过使用单个容器的 id 来获取对单个容器的引用,例如,对于上面代码片段创建的容器,使用 getListenerContainer(String id)\xe2\x80\x89\xe2\x80\x94\xe2\x80\x89 。

\n
\n