сообщение синхронизации ejabberd из архива mysql

Я работаю над ejabberd уже некоторое время, я заменяю сторонний чат-инфра внутренним Ejabberd. Поскольку это был производственный переход, нам нужно сохранить предыдущие сообщения чата при переходе на ejabberd.

Итак, я создал все реестры, перевел пользователей в ejabberd, все работает нормально, теперь главная проблема, с которой я столкнулся, — перенос сообщений. Я использую mysql для пользователей, списков и сообщений. Я запускаю скрипт, который напрямую передает данные в ejabberd mysql из предыдущего чата.

Но когда я подключаюсь к пользователю, я могу видеть новые сообщения чата, которые были отправлены через ejabberd, но перенесенные чаты для того же пользователя не видны и не распространяются обратно клиенту.

Может ли кто-нибудь помочь здесь?

Вот две записи, которые я поместил в mysql, первая - запись ejabberd, а другая - ручная, клиент может синхронизировать первую, но не другую.

username    timestamp   peer    bare_peer   xml txt id  kind    nick    created_at
xyz-customer    1454573488523175 [email protected] [email protected]  "<message from='[email protected]/2131165549e1bc6553-32b9-4ec4-92bd-c9ed80fb5374' to='[email protected]' 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='[email protected]/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 [email protected] [email protected]  "<message from='[email protected]' to='[email protected]' 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"

person mohit3081989    schedule 03.02.2016    source источник


Ответы (1)


Я предполагаю, что вы пытаетесь заполнить таблицу архива сообщений, но ожидаете автономную доставку сообщений. Пожалуйста, убедитесь, что вы добавляете сообщение в правильную таблицу. Я предполагаю, что вы пишете в архивной таблице, но должны писать в спуле.

Обратите внимание, что таблица очереди для доставки сообщений в автономном режиме проверяется только при входе нового пользователя. Это не способ добавления сообщений для доставки пользователю в работающем сеансе. Это означает, что вы не можете синхронизировать две работающие платформы, просто записывая их в таблицу сообщений MySQL. Вам нужно будет на самом деле маршрутизировать сообщения, написав собственный плагин ejabberd.

person Mickaël Rémond    schedule 03.02.2016
comment
Привет, Микаэль, я не пытаюсь обеспечить автономную доставку, я пытаюсь отправлять сообщения на другой платформе в архивную таблицу Ejabberd mysql и выполнять эти сообщения для синхронизации, когда пользователь подключается к сети. - person mohit3081989; 03.02.2016
comment
Затем, как я уже упоминал, запись сообщения в архив или автономное хранилище в MySQL не приведет к маршрутизации сообщения через ejabberd. Вам нужно написать собственный плагин синхронизации. - person Mickaël Rémond; 03.02.2016
comment
Привет, Микаэль, спасибо за предложение, но не могли бы вы рассказать подробнее, или вы можете сказать мне, какой конкретный модуль настроить для загрузки сообщений из mod_archive, я подумал, что если в таблице mod_archive есть все сообщения в формате, который понимает ejabberd, он должен быть в состоянии прочитать это должным образом, я не могу понять, что ограничивает ejabberd от этого. - person mohit3081989; 04.02.2016
comment
Нет, если вы настроите ejabberd для чтения сообщений из MySQL, Mnesia не будет использоваться. Это то, что хранилище используется только для автономных или архивных сообщений. Они считываются только при повторном подключении для доставки сообщений в автономном режиме или при запросе пользователем архива MAM. База данных не является источником для маршрутизации сообщения (это не имеет смысла). - person Mickaël Rémond; 04.02.2016
comment
Эй, Микаэль, Если это так, то не имеет смысла, что ejabberd не может даже прочитать сообщения, которые я отправил в mysql. Что мешает ejabberd читать мои сообщения, каждое поле указано, создано правильное поле xml? В чем здесь может быть причина? И если вы говорите, что Mysql не включает никого между ними, то почему сообщение должно проходить через ejabberd? - person mohit3081989; 04.02.2016
comment
ejabberd читает ваши сообщения. Вы просто неправильно понимаете / неправильно понимаете случай, когда это происходит. В моем комментарии все описано. Я бы только повторил то же самое. - person Mickaël Rémond; 04.02.2016
comment
Кажется, это вопрос пространства имен при отправке запроса mam_archive. Клиент использовал urn:xmpp:mam:0, который использовал mnesia и получал только оттуда. Изменив его на urn:xmpp:mam:1, мы начали получать данные из mysql. - person mohit3081989; 04.02.2016
comment
Итак, в вашем случае вы хотите читать архив, а не маршрутизировать сообщения. - person Mickaël Rémond; 05.02.2016