![](/img/trans.png)
[英]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.