默认
发表评论 9
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已解决] 求教RainbowChat和RainbowChat-Web消息不能实时同步和互通
阅读(17114) | 评论(9 收藏 淘帖
已安装部署完成。现在问题是,app端 与 web端不互通,不同步。比如有 A 和 B 2个用户,2个用户之间,相互之间用 app 发消息,正常的;A 和 B之间,相互用 web 发消息,也是正常的。但是 A 和 B之间,用 app 发的消息,不会及时同步显示在 web 端(web端 手动 刷新页面之后,可以显示);反之也是,用 web 端相互发的消息,手机app上也不会及时显示。



请问如何 排查 和 解决呢?

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:[已回复] RainbowChat是否支持国产化呢?下一篇:[已解决] 求教RainbowChat发送的语音消息,在RainbowChat-Web端无法播放
推荐方案
评论 9
明白了,这种情况,就是消息互通配置有问题,你看一下服务端的3个服务(app产品1 个、web产品两个)里,有关桥接的开关有没有设置成true、另外mq的url有没有设置对(你也可以把3个服务的配置一一贴出来,我帮你确认一下)。除此之外,没有其它可能性。

另外,注意看服务端log4j的日志,所有的问题、异常等,在3个服务的log4j的日志里都会有详细的信息输出,一看便知
引用:JackJiang 发表于 2022-08-23 21:23
明白了,这种情况,就是消息互通配置有问题,你看一下服务端的3个服务(app产品1 个、web产品两个)里,有 ...

apache-tomcat-9.0.65/webapps/im_server/WEB-INF/classes/com/x52im/rainbowchat/base_conf.properties
#与Web产品的互通配置
IM_BRIDGE_ENABLED=true
IM_BRIDGE_MQ_URI=amqp://js:065d0dajcf383b2545e@127.0.0.1


rainbowchat_web/server/conf/config.js

    IMMQ_BRIDGE_ENABLED         : true,
    IMMQ_IMBRIDGE_URL           : 'amqp://js:065d0dajcf383b2545e@127.0.0.1',
    // 要插入DB的持久化数据消息队列服务器连接URI
    IMMQ_2DB_URI                        : 'amqp://js:065d0dajcf383b2545e@127.0.0.1',
        // 要插入DB的持久化数据消息队列名,用于配合IM服务器,从MQ中间件读取并处理离线消息等
        IMMQ_2DB_MSG_WRITE_QNAME: 'q_im2db_msg',


rainbowChatMQServer2_deploy/classes/com/x52im/rainbowchat/mq/base_conf.properties

# 要插入DB的持久化数据消息队列服务器连接URI
IMMQ_2DB_URI=amqp://js:065d0dajcf383b2545e@127.0.0.1

# 要插入DB的持久化数据消息队列名,用于配合IM服务器,从MQ中间件读取并处理离线消息等
IMMQ_2DB_MSG_READ_QNAME=q_im2db_msg




引用:imtudou 发表于 2022-08-24 10:05
[mw_shl_code=shell,true]apache-tomcat-9.0.65/webapps/im_server/WEB-INF/classes/com/x52im/rainbowch ...

这个用户名、密码确认正确吗?
js:065d0dajcf383b2545e
如果这样还不能排查问题,就只能进行详细诊断了。

你诊断一下实时消息收发路径的正常情况:

  • 1)app给app发消息是否能实时收到?
  • 2)app给web发消息是否能实时收到?
  • 3)web给web发消息是否能实时收到?
  • 4)wep给app发消息是否能实时收到?

接着下一步的精确诊断方法:

  • 第一步:关闭所有客户端;
  • 第二步:关闭所有服务端
  • 第三步:重新开启3个服务端(2个web产品要用到的服务端,1个app产品对应的服务端),请务必确保,3个服务端,各自都只存在一个实例在运行,切记!
  • 第四步:分别开启一个app端并登陆,一个web端并登陆;
  • 第五步:有条件的话,清一下3个服务端的log;
  • 第六步:APP端,发送一条消息(记住,只要1条!);
  • 第七步:第6步结束后,什么也别做,分别把3个服务端,针对刚才发出的这一条消息的所有Log,复制出来,并做好文件名标记(对应是哪个服务端的)。

以上log取出来后,看log就明白了,log里会有明确的消息走向日志,如果配置不对出现的异常也有详细的信息输出。

如果你看不明白,可以贴给我,我也帮你们分析分析。

傻瓜式诊断方法,严格按照我说的来。
引用:JackJiang 发表于 2022-08-24 10:10
如果这样还不能排查问题,就只能进行详细诊断了。

你诊断一下实时消息收发路径的正常情况:


INFO  - [14:49:17.402][IMCORE-tcp]<< 收到客户端{uid:400162}/192.168.100.7:38162的通用数据发送请求. | (ServerCoreHandler^messageReceived:206)
DEBUG - [14:49:17.402]【@】当前在线用户共(1)人-------------------> | (OnlineProcessor^__printOnline:212)
INFO  - [14:49:17.402][IMCORE-unknow]toSession==null >> id=400162的用户尝试发给客户端400163的消息:str={"cy":0,"f":"400162","m":"消息4","t":"400163","ty":0}因接收方的id已不在线,此次实时发送没有继续(此消息应考虑作离线处理哦). | (LocalSendHelper^sendData:267)
INFO  - [14:49:17.402][IMCORE-tcp<C2C>]>> 客户端{uid:400162}/192.168.100.7:38162的通用数据尝试实时发送没有成功,将交给应用层进行离线存储哦... | (GlobalSendHelper$2^update:189)
DEBUG - [14:49:17.402][RBChat]【离线存储】[chatType=0,msgType=0,gid=null]正在处理:400162发给400163的离线消息:str={"cy":0,"f":"400162","m":"消息4","t":"400163","ty":0},fingerPring=9a63a10f-efa0-4c90-bf73-2ce0ed521a49,parent_fp=null...... | (OfflineMessageManager^processOfflineMessage:328)
DEBUG - [14:49:17.402]queryData{SQL: select 1 from missu_offline_history where 	history_content2 is not null and history_content2='9a63a10f-efa0-4c90-bf73-2ce0ed521a49'} | (DBShell^queryData:296)
WARN  - [14:49:17.403]【用户信息高速缓存】全部缓存处于ready状态。 | (ChacheProviderRoot^checkForReady:147)
DEBUG - [14:49:17.403]【用户信息高速缓存】已读取完成key=400163的缓存数据,信息:[uid=400163,nickName=user3, iosDeviceToken=] | (ChacheProviderRoot^get:109)
DEBUG - [14:49:17.403]【向iOS离线推送聊天消息】本次无需推送,原因:无该用户400163的ios设备token数据。 {chatType=0,msgType=0,content=消息4,fromUid400162,toUid=400163,toGid=null} | (APNSPushHelper^tryPushChattingMessage:185)
DEBUG - [14:49:17.492][IMCORE-tcp<C2C>]【QoS_伪应答_C2S】向400162发送9a63a10f-efa0-4c90-bf73-2ce0ed521a49的应答包成功,from=400163. | (GlobalSendHelper$2$1^update:223)




测试发现,用户(400163)web 是登录在线的,但是 app 发消息的时候,提示 用户400163 不在线。
引用:imtudou 发表于 2022-08-24 14:53
[mw_shl_code=java,true]
INFO  - [14:49:17.402] | (OnlineProcessor^__printOnline:212)
INFO  - [ ...

从你这段日志中显示,RainbowChatServer中跟web互通的开关并没有打开,但你上面的帖子里贴出来的,显然是已经设为true了,所以你务必验证一下,你改成true之后的配置,到底有没有同步到你发布到tomcat中的部署环境下!切记一定要核实清楚!

之所以这样说,是因为在现有的互通架构下,如果互通正常,则如果此接收者不在线的情况下,会立即通过桥接发给web进行接力发送,而不是直接存离线。
引用:JackJiang 发表于 2022-08-24 15:07
从你这段日志中显示,RainbowChatServer中跟web互通的开关并没有打开,但你上面的帖子里贴出来的,显然是 ...

还真是配置被覆盖了  
引用:imtudou 发表于 2022-08-24 18:36
还真是配置被覆盖了

打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部