繁体   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