我正在使用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方法只调用一次。
答案 0 :(得分:0)
诀窍在于Spring AMQP和Spring Integration的结合。
AmqpInboundGateway
具有自己的MessageConverter
属性,并使用原始MessageListener
中的属性。
我的意思是您应该将自定义gesbDataMessageConverter
完全提供给<int-amqp:inbound-gateway>
而不是容器。