2016-09-22 79 views
1

我正在使用spring boot(基於註釋)處理RabbitMQ。我試圖添加多個偵聽器到一個容器,但只有一個偵聽器工作。Spring Boot多個RabbitMQ監聽器到單容器

我能夠初始化兩個容器併爲每個容器分配單獨的消息監聽器。無論是添加多個偵聽器的唯一方式,其中每個容器都有各自的偵聽器? 我正在使用ChannelAwareMessageListener接口,以便我可以單獨處理消息並確認它們。我不想使用RabbitListener,因爲我無法確認消息。

@Bean 
    @Qualifier("receiverContainer") 
    SimpleMessageListenerContainer receiverContainer(ConnectionFactory connectionFactory,@Qualifier("receiverAdapter") MessageListenerAdapter 
listenerAdapter) { 

     SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
     container.setConnectionFactory(connectionFactory); 
     container.setQueueNames(queueName); 
     container.setMessageListener(listenerAdapter); 
     container.setAcknowledgeMode(AcknowledgeMode.MANUAL); 
     container.setAutoStartup(false); 
     return container; 
    } 

在Spring XML中,我可以添加兩個監聽到一個容器

<rabbit:listener-container 
     connection-factory="connectionFactory" acknowledge="auto" concurrency="10" 
     requeue-rejected="true"> 
     <rabbit:listener ref="myMessageListener" queues="spring.queue" /> 
     <rabbit:listener ref="messageQueueManager" queues="user.login.notification" /> 
    </rabbit:listener-container> 

那麼,如何添加兩個監聽到一個容器在春季啓動基於註解?或者我應該使用一個容器 - 一個聽衆的方式?

+0

這不是'@ RabbitListener'的工作方式,你可以檢查文檔嗎? –

+0

每個''XML元素實際上代表一個單獨的容器 - 請參閱我的答案以獲得完整的描述。 –

回答

1

否;每個容器只允許一個偵聽器。

使用XML名稱空間時,儘管它看起來像有多個偵聽器,但每個<rabbit:listener/>元素都有一個單獨的容器。

<rabbit:listener-container/>父元素是爲子元素創建的每個容器指定公共容器屬性的簡便方法。

+0

謝謝加里澄清容器。 – user2109988