首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMPP Spring集成- Chat

XMPP Spring集成- Chat
EN

Stack Overflow用户
提问于 2017-03-21 14:06:08
回答 1查看 4.2K关注 0票数 3

我是XMPP的新手,我试图在spring中创建一个服务器,以便使用XMPP侦听和发送消息,这就是我尝试过的。

context.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:int-xmpp="http://www.springframework.org/schema/integration/xmpp"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/integration/xmpp
    http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd">

    <int-xmpp:xmpp-connection
        id="xmppConnection" 
        user="admin@192.168.1.201" 
        password="finatel123" 
        host="192.168.1.201"
        port="5222"/>

    <int-xmpp:inbound-channel-adapter 
        id="xmppInboundAdapter"
        channel="chatMessageListening" 
        xmpp-connection="xmppConnection"
        auto-startup="true"/>

    <int-xmpp:outbound-channel-adapter 
        id="outboundEventAdapter"
        channel="chatMessageSending"
        xmpp-connection="xmppConnection" 
        auto-startup="false">
        <poller fixed-rate="5000" max-messages-per-poll="1"/>
    </int-xmpp:outbound-channel-adapter>

</beans:beans>

ChatMessageListening.java

代码语言:javascript
复制
public class ChatMessageListening implements MessageChannel {

    @Override
    public boolean send(Message<?> message) {

        MessageHeaders headers = message.getHeaders();

        System.out.println("FROM    : "+headers.get(XmppHeaders.FROM));
        System.out.println("TO      : "+headers.get(XmppHeaders.TO));
        System.out.println("Time    : "+new Date((Long)headers.get("timestamp")));

        return true;
    }

    @Override
    public boolean send(Message<?> message, long timeout) {
        return true;
    }
}

ChatMessageSending.java

代码语言:javascript
复制
public class ChatMessageSending implements PollableChannel {

    @Override
    public boolean send(Message<?> message) {
        return true;
    }

    @Override
    public boolean send(Message<?> message, long timeout) {
        return true;
    }

    @Override
    public Message<?> receive() {
        return null;
    }

    @Override
    public Message<?> receive(long timeout) {
            return null;
    }
}

通过这样的配置,我能够在ChatMessageListening.send()方法中接收消息。

我试着用

代码语言:javascript
复制
MessagingTemplate template = new MessagingTemplate();
template.setSendTimeout(5000L);

Message<String> xmppOutboundMsg = MessageBuilder.withPayload("Hello, XMPP!" )
    .setHeader(XmppHeaders.FROM, "admin@192.168.1.201")
    .setHeader(XmppHeaders.TO, "adminone@192.168.1.201")
    .setHeader(XmppHeaders.TYPE, "chat")
    .build();
template.setDefaultChannel(new ChatMessageSending());
template.send(xmppOutboundMsg);

但是它不是发送到客户端,而是接收到ChatMessageSending。请指导我做错了什么。我要用的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 19:07:10

你用的是MessageChannel奇怪的方式。

请考虑修改您对此事的看法:EIP定义和Spring 实现

生产者向信道发送消息,消费者从通道接收消息。

因此,消息通道不能是listener,也不能是类似于sending的东西。

您只需在配置中声明两个<channel>,并使用适当的<service-activator>来处理来自XMPP和其他一些消息的消息。

是的,MessagingTemplate可以用于发送,但是您必须指出正确的MessageChannel bean,您的<int-xmpp:outbound-channel-adapter>将在那里订阅。

现在,您的ChatMessageSending有一个空实现,并且没有任何连接到目标通道适配器。

顺便说一下,这里有一个XMPP 示例

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42929458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档