Spring integration 使用JMS:publish-subscribe通道发布时,JMS消息正文为空

Spring integration 使用JMS:publish-subscribe通道发布时,JMS消息正文为空,spring-integration,spring-jms,Spring Integration,Spring Jms,我尝试在单个ActiveMQ主题上使用jms:publish-subscribe频道发布/订阅。我能够在通道上很好地接收来自ActiveMQ的消息,但是当我发布到通道时,消息体为空(当由另一个侦听ActiveMQ主题的应用程序接收时)。我能够使用SpringIntegrationSamples->basic->jms重新创建问题。我修改了outboundChannelAdapter.xml以使用jms:publish-subscribe通道而不是jms:outbound通道适配器。发布简单的字符

我尝试在单个ActiveMQ主题上使用jms:publish-subscribe频道发布/订阅。我能够在通道上很好地接收来自ActiveMQ的消息,但是当我发布到通道时,消息体为空(当由另一个侦听ActiveMQ主题的应用程序接收时)。我能够使用SpringIntegrationSamples->basic->jms重新创建问题。我修改了outboundChannelAdapter.xml以使用jms:publish-subscribe通道而不是jms:outbound通道适配器。发布简单的字符串消息还需要其他步骤吗?以下是我对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"/>

我不知道您所说的“消息正文为空”是什么意思

我只是对样品做了完全相同的更改,对我来说效果很好

Please type something and hit <enter>

foo
foo
请键入内容并点击
福
福

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

感谢您的回复,Gary。是否可以将消息作为字符串而不是序列化对象发送?不使用JMS支持的通道-为此使用一对通道适配器-消息负载成为JMS消息体;这些头映射到JMS头(只要
提取有效负载
为true-默认值)。JMS支持的通道用于持久化,而不是将数据分发到其他应用程序。好的,明白了。由于我在同一主题上使用pub/sub,如何避免在使用一对通道适配器时收到我刚刚发出的相同消息?抱歉,不清楚您的意思。出站适配器发布到主题;多个入站适配器将分别获取消息的一个副本,但每个适配器将仅获取一个副本。假设您使用的是一个主题,因为您有多个收件人。我看到的行为——在同一个服务中运行一对通道适配器——是每当我在出站上发布消息时,我都会看到它在入站上传入。我想过滤掉我的服务发送的邮件。这就是为什么我在看发布-订阅频道,因为它可以处理这个问题。