这里说一下我入的坑:
公司这边发送消息后台用的是ActiveMQ使用的是发布订阅模式(没有使用mqtt协议来做聊天,当时是想着ActiveMQ是包含mqtt协议的用ActiveMQ也是一样的),发消息这块测试之后是没有问题的,单聊群聊都是能收到即时消息的,安卓和ios这边使用的是mqtt连接的正常杀进程发遗嘱这块重连后也是能收到消息。
但是安卓这边发现如果是突然断网或者网络异常的情况下(如电梯内,地铁部分路段)这这段时间终端是没有办法收到这期间发送的消息。
bug重现:
安卓连接mqtt心跳设置的30秒,在心跳期间第三秒手机异常断网这时候安卓的连接依旧存在
如果这时候有生产者发送消息到这个主题
我们会发现发送的消息正常应该是在为消费队列里面但是却变成了已消费,我们的历史记录是在生产者生产消息的时候就存入mongoDB,在mongoDB中也是能看到发送的消息的,在第三秒到30秒这个时间段发送的消息用户重连后是收不到的,当心跳设置的时间达到后生产者生产的消息才会出现在未处理队列里面,之后重连的话安卓才会收到未处理队列里面的消息。
可能说的不是很明白 但是大概就是这么个意思,期间想过很多可能比如将订阅模式改为非持久订阅并使用恢复策略(这个还是有一点点用处的),开启内存存取等,发现基本都不能解决,该怎么样还是