![](/img/trans.png)
[英]How to configure RabbitMQ in XML file to have 1) listener listening from multiple queues 2) 2 listeners listening to same queue?
[英]How to configure a listener to handle messages from multiple exchanges for the same queue in 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是不同的。
編輯:第二個構造函數參數需要為每個路由鍵都不同。 如何添加該配置
我該如何進行?
看來您不太了解AMQP協議。
生產者通過routingKey
將消息發送到Exchange
。
您必須使用該routingKey
將queue
bind
到該Exchange
。
當然,對於具有不同Exchange
和不同routingKey
的同一queue
,您可以具有多個綁定。 但是無論如何它將是同一隊列。
因此,應將您的偵聽器配置為僅從該隊列接收消息。 因為對他來說,消息在隊列中的顯示方式無關緊要。
抱歉,如果我不能正確理解您的問題...
UPDATE
我想要的是,每個路由鍵的第二個構造函數參數
<constructor-arg ref="exampleMessageConverter" />
都必須不同。
您不能從SimpleMessageListenerContainer
做到這一點,您可以在目標exampleMessageEventHandler
下游某處實現所需的routing
邏輯,Spring AMQP Message
的MessageProperties
具有屬性getReceivedExchange()
和getReceivedRoutingKey()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.