openfire不再往离线消息表写入数据

问题源于 近期参与一个线上会议,我的两部手机均参与了这个会议,但是其中一个手机处于关机状态,另外一部手机完整的参与了正常会议,整场会议约产生了100多条语音消息;会议结束后关机的手机充电后开机,但是接受的消息只有40多条,这下问题来了,其他的一些消息去哪了呢,于是开始地毯式排查。

 

排查时记录了下操作顺序。

 

客户端a(username=14)、b(username=5)、c(username=1466)都在一个圈子(公共聊天室)t里边,b、c关闭网络,关闭屏幕

 

1.a往圈子t里边发送50条语音消息(录制新闻联播)

 

2.后台查询共计50条语音消息

 

2.ofOffline共计查询到b、c的离线消息均是87条(语音消息44以及翻译文字内容43)

 

3.客户端b打开网络,接收到的消息数是44,最后一条语音消息的文字版缺失

 

4.a继续往聊天室发送一条文本消息,ofOffline消息查到c的离线消息仍然是87条

查看openfire的info日志,日志中出现

2015.08.14 16:02:36 org.jivesoftware.openfire.plugin.MessageReceiptPlugin - 其他信息:<message from="1466@127.0.0.1" to="14@127.0.0.1" type="error" id="1439539356276"><body>{"id":74433,"parentid":0,"tag":"C25CA49E-21AF-40FB-B315-E53FC80D6B14","type":"200","from":"14","to":"1437657516095","title":"\u82b1\u65f6\u95f4","time":1439539356236,"content":"456","displayName":"\u5321\u52c7","headImgUrl":"http:\/\/guirenhui.cn\/Data\/upload\/user\/55af176020bea_jpg_s","isanonymity":"0","imgUrlS":"","imgUrlL":"","imgWidth":"","imgHeight":"","voiceUrl":"","voiceTime":"","fileType":"1","url":"","bigv":"0","samplerate":"0","commenterid":"","commentername":"","reisanonymity":"0","tofakeid":"","fromrole":"1","conversion":{"type":"200","toid":"1437657516095","name":"\u82b1\u65f6\u95f4","headurl":"http:\/\/guirenhui.cn\/Data\/upload\/tribe\/6_s"}}</body><error code="404" type="continue"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></message>

 

 

5.b继续往聊天室发消息,出现4中类似的日志

2015.08.14 16:09:13 org.jivesoftware.openfire.plugin.MessageReceiptPlugin - 其他信息:<message from="1466@127.0.0.1" to="5@127.0.0.1" type="error" id="1439539753939"><body>{"id":74434,"parentid":0,"tag":"b8fa35d6-e79c-4d65-a12b-e78323d664fc","type":"200","from":"5","to":"1437657516095","title":"\u82b1\u65f6\u95f4","time":1439539753905,"content":"789","displayName":"\u66fe\u5c0f\u5e74","headImgUrl":"http:\/\/guirenhui.cn\/Data\/upload\/user\/54463417336d7_jpg_s","isanonymity":"0","imgUrlS":"","imgUrlL":"","imgWidth":"","imgHeight":"","voiceUrl":"","voiceTime":"0","fileType":"1","url":"","bigv":"0","samplerate":"8000","commenterid":"","commentername":"","reisanonymity":"0","tofakeid":"","fromrole":"0","conversion":{"type":"200","toid":"1437657516095","name":"\u82b1\u65f6\u95f4","headurl":"http:\/\/guirenhui.cn\/Data\/upload\/tribe\/6_s"}}</body><error code="404" type="continue"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></message>

 

 

6.openfire管理后台查看到的状态是c出于离线状态

 

7.登陆open fire控制台发现其中一个设置

 

存储 - 存储脱机消息以便以后检索。下次接收者登录后将传递此消息。在下面选择一个存储策略及存储器存储最大大小。

 

 

√存储或反弹 - 存储消息至最大存储大小。超出最大大小之后,把消息反弹回发送者。

 

总是存储 - 总是存储消息(即使超出了最大存储大小)。

 

存储或丢弃 - 存储用户消息至最大存储大小。超出最大大小之后,不提示而丢弃消息。

每个用户的脱机消息存储限制:100.00 KB

 

 

 

 

 

8.感觉问题应该出现在存储限制中,统计了下87条消息的messageSize刚好101kb,于是修改每个用户的脱机消息存储限制为110.0kb时a继续往圈子里边发消息,发现c的离线消息记录数量会增长到88条

 

 

——————

至此,问题原因明确,openfire控制台设置的每个用户的离线消息存储限制会限制用户存储的离线消息数量数

 

——————

问题解决方案:暂时将openfire的离线消息存储提升至10000.0kb(10m)

 

考虑到消息的价值,应该存储最近1年的消息,最好可以设置按时间策略存储新的消息,删除早期的消息,但是这个需要修改源码,时间允许的情况下再去做此修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值