簡體   English   中英

SpringBoot Application啟動后啟動@RabbitListener

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM