2017-04-12 84 views
1

我有一個發佈事件E1的類A. E1在由@RabbitListener註釋的同一應用程序中由B類消耗。 B做一些事情,然後發佈C等消耗的事件E2(形成一個過程鏈)。以編程方式啓用和禁用某些@ RabbitListener的Spring?

我想要做的是兩兩件事:

  1. 我想測試在集成測試,但這樣做時,我想禁用RabbitListener's使整個過程的結果是E1正在發佈未執行。我只想斷言A會做它應該做的事情併發布E1。我設法通過設置spring.rabbitmq.listener.auto-startup=false來解決這個問題。
  2. 我還想通過將E1發佈到RabbitMQ來進行集成測試中的B測試,以便我可以確信已正確配置B的RabbitListerner。但是,我不希望C被稱爲E2發佈的副作用。

我知道我可以用這個嘲笑,但最好我想測試真正的交易,使用實際的部件(包括髮送消息到實際的RabbitMQ實例,在我的情況下,在泊塢正在運行)可能會做。

我可以在Spring Boot中以很好的方式實現這個功能嗎?或者,它可能是建議使用@RabbitListenerTest,確實使用模擬?

回答

3

@RabbitListenerid屬性:

/** 
* The unique identifier of the container managing for this endpoint. 
* <p>If none is specified an auto-generated one is provided. 
* @return the {@code id} for the container managing for this endpoint. 
* @see org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry#getListenerContainer(String) 
*/ 
String id() default ""; 

RabbitListenerEndpointRegistry#getListenerContainer(String)回報MessageListenerContainer有你已經可以控制單個@RabbitListener處理的start()/stop()

相關問題