ejabberd从mysql存档同步消息

时间:2016-02-03 11:40:29

标签: erlang ejabberd otp ejabberd-module ejabberd-hooks

我正在ejabberd上工作很长一段时间,我正在用Ejabberd内部取代第三方Chat基础。因为它是生产开关,所以我们需要在切换到ejabberd时保持以前的聊天消息。

所以我创建了所有的名单,将用户迁移到了ejabberd,这一切都运行良好,现在我面临的主要挑战是消息迁移。我正在为用户,名册和消息使用mysql。我正在运行一个脚本,它直接将数据从之前的聊天基础上推送到ejabberd mysql。

但是当我连接到用户时,我能够看到通过ejabberd发送的新聊天消息,但同一用户的迁移聊天不可见,不会传播回客户端。

有人可以帮忙吗?

以下是我在mysql中输入的两个条目,第一个是ejabberd条目,另一个是手动,客户端可以同步第一个而不是另一个。

username    timestamp   peer    bare_peer   xml txt id  kind    nick    created_at
xyz-customer    1454573488523175 abc-provider@xxx.amazonaws.com abc-provider@xxx.amazonaws.com  "<message from='xyz-customer@xxx.amazonaws.com/2131165549e1bc6553-32b9-4ec4-92bd-c9ed80fb5374' to='abc-provider@xxx.amazonaws.com' xml:lang='en' id='oG3Vb-568' type='chat'><body> CnsfjffsjJ</body><thread>90275196-0096-4bb4-a95d-d72ea5238f74</thread><request xmlns='urn:xmpp:receipts'/><delay xmlns='urn:xmpp:delay' stamp='2016-02-04T08:11:27.194+00:00' from='xyz-customer@xxx.amazonaws.com/2131165549e1bc6553-32b9-4ec4-92bd-c9ed80fb5374'/><markable xmlns='urn:xmpp:chat-markers:0'/><request xmlns='urn:urbanclap:request' requestId=''/><active xmlns='http://jabber.org/protocol/chatstates'/></message>"   " CnsfjffsjJ"   208044  chat        "2016-02-04 08:11:28"

xyz-customer    1454570506606317 abc-provider@xxx.amazonaws.com abc-provider@xxx.amazonaws.com  "<message from='xyz-customer@xxx.amazonaws.com' to='abc-provider@xxx.amazonaws.com' xml:lang='en' id='I5sO7-2' type='chat'><body>GB hard</body><request xmlns='urn:xmpp:receipts'/><markable xmlns='urn:xmpp:chat-markers:0'/><active xmlns='http://jabber.org/protocol/chatstates'/></message>"    "GB hard"   208045  chat    NULL    "2016-02-04 07:21:46"

1 个答案:

答案 0 :(得分:0)

我猜您正在尝试填写邮件存档表,但期望离线邮件传递。请确保您在右表中添加消息。我猜你是在写存档表中写的,但是应该在spool中写。

请注意,用于传递离线消息的假脱机表仅检查新用户登录。它不是一种在正在运行的会话中添加要传递给用户的消息的方法。这意味着只需在MySQL消息表中写入就无法真正同步两个正在运行的平台。您需要通过编写自定义ejabberd插件来实际路由消息。