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,则无法向聊天服务器发送消息

找不到 XMPP Spring 集成属性或字段“json”

用gradle4.4转化spring,发现依赖包integration-0.9.15.jar已经不在