2014-09-25 340 views
0

我的應用程序中有一個隊列監聽多個交換機,每個交換機使用不同的路由密鑰。如何在rabbitmq中配置一個監聽器來處理來自多個交換機的同一隊列的消息spring

我已經配置聽者從以下面的方式那些交換機之一處理消息:

<bean id="exampleMessageConverter"  class="org.springframework.amqp.support.converter.JsonMessageConverter"> 
    <property name="classMapper"> 
     <bean class="<packagename>.NamedClassMapper"> 
      <constructor-arg value="<packagename>.exampleDTO" /> 
     </bean> 
    </property> 
</bean> 

<bean id="organizationUpdateEventListener" class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="queueNames" value="${main.queue}" /> 
    <property name="messageListener"> 
     <bean class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter"> 
      <constructor-arg> 
       <bean class="<packageName>.exampleMessageEventHandler" /> 
      </constructor-arg> 
      <constructor-arg ref="exampleMessageConverter" /> 
     </bean> 
    </property> 
    <property name="adviceChain"> 
     <list> 
      <ref bean="retryAdvice" /> 
     </list> 
    </property> 
</bean> 

欲配置相同的監聽器來處理來自另一交換消息,但DTO從發送每一次交換都是不同的。

編輯: 對於每個路由密鑰,第二個構造方法參數需要不同。如何添加該配置

我該如何繼續?

回答

1

看起來你不瞭解AMQP協議了一下。

生產者通過routingKey發送消息給Exchange

您必須bindqueue到那個Exchange與那routingKey

當然,您可以針對相同的queue使用不同的Exchange和不同的routingKey s。但無論如何,這將是同一個隊列。

因此,您的偵聽器應配置爲僅接收來自該隊列的消息。因爲對他來說,消息如何出現在隊列中並不重要。

對不起,如果我沒有理解你的問題正確...

UPDATE

我想要的是<constructor-arg ref="exampleMessageConverter" />需要第二個構造函數參數是爲每個路由關鍵不同。

你不能這樣做,從SimpleMessageListenerContainer,可下游某處目標exampleMessageEventHandler達到預期routing邏輯,春節AMQP MessageMessageProperties具有性能getReceivedExchange()getReceivedRoutingKey()

+0

對不起,我沒有說清楚我是什麼想要的是第二個構造函數參數 對於每個路由密鑰都需要不同。我該如何配置? – 2014-09-25 14:34:09

+0

爲您的解釋添加了答案。謝謝 – 2014-09-25 14:44:06

相關問題