【问题标题】:Spring RabbitMQ custom message converter in listener侦听器中的 Spring RabbitMQ 自定义消息转换器
【发布时间】:2017-11-24 02:52:35
【问题描述】:

我正在使用带有 Spring 集成的 RabbitMQ。 我想为这样的消息监听器注册一个消息转换器:

<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方法只调用一次。

【问题讨论】:

  • 您只需通过“编辑”功能将您的评论移至问题。

标签: java spring rabbitmq spring-integration


【解决方案1】:

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

我的意思是您应该将您的自定义 gesbDataMessageConverter 完全提供到 &lt;int-amqp:inbound-gateway&gt; 而不是容器中。

【讨论】:

  • 您好 Artem,我没有使用 int-ampq:inbound-gateway,而是 int:gateway,但当我检查 xsd 时,它们都不支持 message-converter。唯一放置它的地方是容器上。
  • 嗯。你没有别的容器吗?是不是有一些 AOP 工具可以直接覆盖字段中的值?你能想出一些简单的应用程序来最小化问题的边界吗?因为你甚至可以调试对你来说没什么大不了的 Spring 代码
猜你喜欢
  • 2018-05-03
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多