Spring Integration Xmpp 4 - 发送创建 muc 请求
Posted
技术标签:
【中文标题】Spring Integration Xmpp 4 - 发送创建 muc 请求【英文标题】:Spring Integration Xmpp 4 - Send create muc request 【发布时间】:2016-04-12 12:50:04 【问题描述】:我用 xmpp 配置了 spring 集成,我可以向其他 jid 发送消息。 要构建消息,我使用以下方法:
Message<?> message = MessageBuilder.withPayload("Test Message").
setHeader(XmppHeaders.TO, "pino@chiarottos-macbook-pro.local").
build();
messageChannel.send(message);
现在我想创建一个聊天室,我试图弄清楚如何构建一条包含多用户聊天请求的消息,但没有成功。
有什么帮助吗?
使用:XmppHeaders.TYPE
设置为 "groupchat"
和 XmppHeaders.TO
设置为“myroommmm”不起作用.. xmpp 服务器日志:
[info] <0.609.0>@ejabberd_c2s:open_session:1105 (socket_state,gen_tcp,#Port<0.16208>,<0.608.0>) Opened session for chiarotto@chiarottos-macbook-pro.local/resource 2016-04-12 15:55:40.987 [info] <0.609.0>@ejabberd_s2s:new_connection:406 New s2s connection started <0.611.0>
[info] <0.611.0>@ejabberd_s2s_out:log_s2s_out:1253 Trying to open s2s connection: chiarottos-macbook-pro.local -> myroommmmme with TLS=false 2016-04-12 15:55:40.999 [info] <0.611.0>@ejabberd_s2s_out:open_socket:246 s2s connection: chiarottos-macbook-pro.local -> myroommmmme (remote server not found)
我正在运行集成测试
更新 2: 使用:
MultiUserChat multiUserChat = new MultiUserChat(xmppConnection,"prova");
try
multiUserChat.join("soisdjdsoijds");
catch (XMPPException.XMPPErrorException e)
e.printStackTrace();
catch (SmackException e)
e.printStackTrace();
我收到以下错误:
remote-server-not-found
at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:196)
at org.jivesoftware.smackx.muc.MultiUserChat.enter(MultiUserChat.java:352)
at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:516)
at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:451)
at radiosa.service.muc.MUCService.testRoom(MUCService.java:83)
(服务器已正确配置并且正在运行)
【问题讨论】:
【参考方案1】:ChatMessageSendingMessageHandler
仅用于发送消息。
所有多用户聊天管理(创建、加入、离开等)必须通过org.jivesoftware.smackx.muc.MultiUserChatManager
完成。
虽然您仍然可以使用ChatMessageSendingMessageHandler
在那里发送消息:
根据 JavaDocs,XmppHeaders.TO
标头必须是 room
名称:
* @param jid the name of the room in the form "roomName@service", where "service" is the hostname at which the
* multi-user chat service is running. Make sure to provide a valid JID.
*/
public synchronized MultiUserChat getMultiUserChat(String jid)
并且XmppHeaders.TYPE
标头的值必须为Message.Type.groupchat
【讨论】:
谢谢,如果我使用 MultiUserChatManager 我必须将我的 XMPPConnection bean 传递给它?顺便说一句,我使用的是最新版本的 spring-integration-xmpp (4.2.5),它取决于不包含 MultiUserChatManager 的 smack 版本。 是的...我明白了。看起来它是从Smack 4.1.x
开始引入的。我们从 SI-4.3 开始支持这一点。我想你也可以通过 MultiUserChat
: public MultiUserChat(XMPPConnection connection, String room)
来做同样的事情。
但是使用 MultiUserChat 我不会再使用频道了,只是 xmppconnection,对吧?我想使用频道并将最少的信息发送到我的 xmpp 服务器以创建房间。
我认为你必须先join
milti-user 聊天,然后才能发送消息。我已经说过了:通过ChatMessageSendingMessageHandler
,您只能将Message
数据包发送到xmppconnection
。您必须直接使用MultiUserChat
进行任何群聊管理。虽然你可以将所有操作封装到service-activator
中,并发送命令消息来管理聊天。
日志见:remote server not found
。那不是 Spring Integration 问题。对不起。以上是关于Spring Integration Xmpp 4 - 发送创建 muc 请求的主要内容,如果未能解决你的问题,请参考以下文章
Spring Integration 的 XMPP 通道适配器
如何使用 Spring Integration 发送 gcm xmpp 消息?
xmpp-connection (spring integration) 的正确参数是啥,以使其与 google gcm 一起使用?
Spring Integration XMPP - 如果 XmppConnectionFactoryBean 的属性 autoStartup 配置为 false,则无法向聊天服务器发送消息