簡體   English   中英

如何配置偵聽器以處理Rabbitmq Spring中來自同一隊列的多個交換的消息

[英]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

您必須使用該routingKeyqueue bind到該Exchange

當然,對於具有不同Exchange和不同routingKey的同一queue ,您可以具有多個綁定。 但是無論如何它將是同一隊列。

因此,應將您的偵聽器配置為僅從該隊列接收消息。 因為對他來說,消息在隊列中的顯示方式無關緊要。

抱歉,如果我不能正確理解您的問題...

UPDATE

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

您不能從SimpleMessageListenerContainer做到這一點,您可以在目標exampleMessageEventHandler下游某處實現所需的routing邏輯,Spring AMQP MessageMessageProperties具有屬性getReceivedExchange()getReceivedRoutingKey()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM