Spring RabbitMQ自定义消息转换器在监听器中

时间:2017-06-21 09:28:11

标签: java spring rabbitmq spring-integration

我正在使用RabbitMQ和Spring Integration。 我想为消息监听器注册一个消息转换器,如下所示:

<rabbit:listener-container
        connection-factory="gesbRabbitmqConnectionFactory"
        acknowledge="auto"
        channel-transacted="true"
        transaction-manager="rabbitTxManager"
        task-executor="gesbSyncExecutor"
        concurrency="1"
        max-concurrency="2"
        requeue-rejected="false"
        message-converter="gesbDataMessageConverter">
    <rabbit:listener
            ref="gesbListenerBean"
            queue-names="${gesb.partyid.queue}" />
</rabbit:listener-container>

当应用程序启动时,我在setMessageConverter中放置了一个断点,并且我的消息转换器gesbDataMessageConverter设置正确。 但是在运行时消息到达时,消息转换器是SimpleMessageConverter而不是我的。 有什么想法吗?

作为一种解决方法,我已将转换器注入侦听器并再次调用setMessageConverter,它似乎可以工作,但我不知道为什么最初它没有。只有一个侦听器对象,set方法只调用一次。

1 个答案:

答案 0 :(得分:0)

诀窍在于Spring AMQP和Spring Integration的结合。 AmqpInboundGateway具有自己的MessageConverter属性,并使用原始MessageListener中的属性。

我的意思是您应该将自定义gesbDataMessageConverter完全提供给<int-amqp:inbound-gateway>而不是容器。