【发布时间】:2015-07-03 22:57:37
【问题描述】:
是否有变通办法让 Spring 处理来自 XMPP 的传入消息?我尝试了许多不同的配置来让入站通道适配器响应传入的 XMPP 消息,但没有任何反应。我知道它们出现在 Spring Integration 层(我可以在日志中看到)但它们被忽略了。有没有办法让它们进入我的应用层?如果可以的话,我希望避免对 Spring Integration 本身进行更改。
这是我的集成配置:
<int-xmpp:inbound-channel-adapter id="gcmIn"
channel="gcmInChannel"
xmpp-connection="gcmConnection"
auto-startup="true"
/>
<bean id="inboundBean" class="example.integration.GcmInputHandler"/>
<int:service-activator input-channel="gcmInChannel" output-channel="nullChannel" ref="inboundBean" method="handle"/>
使用出站通道适配器可以正常工作。我可以 100% 轻松地通过 GCM 发送消息。但是 inbound 什么也没做,即使我知道消息正在进来。
谢谢
【问题讨论】:
-
请分享您的日志,甚至更好的测试用例来重现。也许您在
inboundBean之后将它们发送到nullChannel的问题? -
我发现出了什么问题。这是一个相当复杂的问题。基本上,Spring Integration 会默默地丢弃空的 XMPP 消息。当 GCM 通过 XMPP 发送消息时,消息内容在扩展中,而不是在正文中,因此 Spring Integration 认为消息是空的,因此被静默丢弃。它永远不会离开入站通道适配器。我查看了源代码,当消息被删除时没有日志记录,这使得在任何日志记录级别都无法看到这个问题。我可能会发布一份指南,其中包含完成这项工作所必须完成的所有步骤。