【问题标题】:JMS Message body is null when publishing with jms:publish-subscribe-channel使用 jms:publish-subscribe-channel 发布时,JMS 消息正文为空
【发布时间】:2017-06-03 07:13:05
【问题描述】:

我正在尝试使用 jms:publish-subscribe-channel 发布/订阅单个 ActiveMQ 主题。我能够在通道上接收来自 ActiveMQ 的消息就好了,但是当我发布到通道时,消息正文为空(当另一个应用程序接收到侦听 ActiveMQ 主题时)。我能够使用 spring-integration-samples->basic->jms 重新创建问题。我修改了 outboundChannelAdapter.xml 以使用 jms:publish-subscribe-channel 而不是 jms:outbound-channel-adapter。为了发布简单的字符串消息,是否需要另一个步骤?这是我对 outboundChannelAdapter.xml 的代码更改:

<stream:stdin-channel-adapter id="stdin" channel="stdinToJmsoutChannel"/>

<jms:publish-subscribe-channel id="stdinToJmsoutChannel" topic="requestTopic" />    

<stream:stdout-channel-adapter id="stdout" channel="stdinToJmsoutChannel" append-newline="true"/>

【问题讨论】:

    标签: spring-integration spring-jms


    【解决方案1】:

    我不确定您所说的“消息正文为空”是什么意思。

    我刚刚对示例进行了完全相同的更改,它对我来说效果很好......

    Please type something and hit <enter>
    
    foo
    foo
    

    我不得不将-Dorg.apache.activemq.SERIALIZABLE_PACKAGES=* 添加到命令行,因为activemq 需要将类列入白名单(整个消息在jms 支持的通道中序列化)。

    【讨论】:

    • 感谢您的回复,加里。是否可以将消息作为字符串而不是序列化对象发送?
    • 不使用 JMS 支持的通道 - 为此使用一对通道适配器 - 消息有效负载成为 JMS 消息体;标头映射到 JMS 标头(只要 extract-payload 为 true - 默认值)。 JMS 支持的通道旨在用于持久性,而不是用于将数据分发到其他应用程序。
    • 好的,知道了。由于我在同一主题上使用 pub/sub,如何避免在使用一对通道适配器时收到我刚刚发出的相同消息?
    • 抱歉,不清楚您的意思。出站适配器发布到主题;多个入站适配器将分别获得消息的副本,但每个适配器只会获得一个。大概您正在使用一个主题,因为您有多个收件人。
    • 我看到的行为——在同一个服务中运行一对通道适配器——是每当我在出站发布消息时,我都会看到它在入站中进入。我想过滤掉我的服务发送的消息。这就是为什么我一直在关注发布订阅通道,因为它可以处理这个问题。
    猜你喜欢
    • 2015-07-08
    • 2014-09-16
    • 1970-01-01
    • 2021-01-30
    • 2014-03-29
    • 1970-01-01
    • 2014-08-01
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多