Spring XMPP GCM入站通道未调用服务激活器功能



下面是我的spring xmpp集成配置的片段,

<context:property-placeholder location="classpath:xmpp.properties"/>
    <int-xmpp:inbound-channel-adapter auto-startup="true" 
    payload-expression="getExtension('google:mobile:data').json"
    channel="xmppChannel"
     xmpp-connection="xmppConnection" />
        <int:service-activator ref="xmppMessageConsumer" 
        input-channel="xmppChannel"/>
<int:logging-channel-adapter id="xmppChannel" log-full-message="true"
        />

这是我的服务激活器定义

import org.apache.log4j.Logger;
import org.springframework.messaging.Message;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.stereotype.Component;
@Component
public class XmppMessageConsumer {
    private final List<String> xmppMessages;
    private static final Logger LOGGER = Logger.getLogger(XmppMessageConsumer.class);
    public XmppMessageConsumer() {
        // TODO Auto-generated constructor stub
        xmppMessages=new ArrayList<String>();
    }
  @ServiceActivator
   public void consume(Message<?> input) throws Throwable {
      String text = (String)input.getPayload();
      xmppMessages.add(text);
      LOGGER.info(text);

   }

从日志中我可以看到通道收到的消息,但是服务激活器函数没有被调用。

10:48:59 PM RECV (0): <message to="588523657007@gcm.googleapis.com" from="devices@gcm.googleapis.com" type="normal"><gcm xmlns="google:mobile:data">{"data":{"Hello":"How are you"},"time_to_live":0,"from":"dqWxVXwH7HU:APA91bFco6xelMctjv5nMgeAIiZtH7TCCMX5a6UZ-ae2yNkBxLh-zVqy32gm6bd1IC3pyKCEwnYOFiBn4au-4XvPn8TzTvikGUNfeQ_1RN_TMk-9dyJ2WtJXVr7RCn0AGynToTWCZ7oC","message_id":"1Id","category":"com.google.firebase.quickstart.fcm"}</gcm></message>

我的假设是通过定义有效负载表达式,消息解析由框架负责。如果我说错了,请指正。

根据您当前的配置,您有两个xmppChannel的订阅者—服务激活器和日志适配器。

当您有两个消费者订阅了相同的通道(默认为DirectChannel)时,消息将交替地发送给这两个消费者-轮循分发。

如果您希望文件同时发送给两个消费者,请将其更改为pub/sub通道。

<int:publish-subscribe-channel id="xmppChannel"/>

如果您为org.springframework.integration打开DEBUG日志,您可以通过流跟踪消息。

最新更新