XMPP Spring 集成 - 聊天
XMPP Spring integration - Chat
我是 XMPP 的新手,尝试在 spring-boot 中创建一个服务器来使用 XMPP 监听和发送消息,这就是我尝试过的
context.xml
<?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
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
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()
方法接收消息。
我尝试使用
发送消息
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
。请指导我做错了什么。我必须使用什么。
你使用MessageChannel
奇怪的方式。
请考虑修改您对此事的看法:
EIP definition and Spring Integration implementation:
Producers send Messages to a channel, and consumers receive Messages from a channel.
所以,消息通道不能是 listener
也不能是 sending
.
您只需在您的配置中声明一对 <channel>
并使用适当的 <service-activator>
来处理来自 XMPP 的消息,并使用其他一些来生成消息。
是的,MessagingTemplate
可用于发送,但您必须指出正确的 MessageChannel
bean,您的 <int-xmpp:outbound-channel-adapter>
将成为订阅者。
现在你的 ChatMessageSending
有一个无效的实现,并且没有任何与目标通道适配器的连接。
顺便给你一个XMPP sample。
我是 XMPP 的新手,尝试在 spring-boot 中创建一个服务器来使用 XMPP 监听和发送消息,这就是我尝试过的
context.xml
<?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
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
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()
方法接收消息。
我尝试使用
发送消息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
。请指导我做错了什么。我必须使用什么。
你使用MessageChannel
奇怪的方式。
请考虑修改您对此事的看法: EIP definition and Spring Integration implementation:
Producers send Messages to a channel, and consumers receive Messages from a channel.
所以,消息通道不能是 listener
也不能是 sending
.
您只需在您的配置中声明一对 <channel>
并使用适当的 <service-activator>
来处理来自 XMPP 的消息,并使用其他一些来生成消息。
是的,MessagingTemplate
可用于发送,但您必须指出正确的 MessageChannel
bean,您的 <int-xmpp:outbound-channel-adapter>
将成为订阅者。
现在你的 ChatMessageSending
有一个无效的实现,并且没有任何与目标通道适配器的连接。
顺便给你一个XMPP sample。