环境信息
- EMQX 版本:
- 操作系统及版本:
- 其他
在app切换到后台5分钟左右连接断开,2个小时左右订阅的主题被清除
主题被清除是指dashboard上看不到了吗?设备离线之后,订阅关系就会清除掉,clean_session打开的话,还会短暂的保留一会,但是最终还是要被清除掉的
就是我clean_session打开,client断开连接,过一段时间大概两个小时左右,我这个client_id下面所有订阅列表就会被清除,有什么方法可以在设备离线后能保留该client_id下的订阅信息
./emqx_ctl subscriptions list
是通过这个命令去查看的
代理订阅的话,当客户端重新连接的时候,能恢复该客户端v之前的订阅关系吗,如果可以恢复的话,在我断开连接这段时间发送的消息能否再次收到
意思就是设备再次上线的时候可以恢复我之前的订阅关系(该客户端之前订阅的主题),但是无法收到在这段时间内的所发送的消息,如果是再我社保上线之后再发送的消息就可以收到
代理订阅是这个工作模式
还有一个就是borker重启之后之前的订阅关系能否恢复
不能,我们一般认为emqx不重启,长期服务
那万一断电或者宕机了呢,服务端能否恢复之前的订阅关系
不支持,断电宕机属于不可预估的情况,也无法估算恢复时间与恢复状态,这种情况下,无法预知影响
服务器运维的问题,这种情况下EMQX的状态已经不重要了,服务质量应该从机房开始保障
我觉得你应该考虑的是,怎么样管理业务流程,而不是一直在考虑极端情况的失败。
举个例子:
设备状态不好,断网断电之类的情况下,离线了,离线期间可能会有业务消息不想丢失。解决的办法应该是设备主动上报业务执行的进度,比如增加一个业务编号,每次登陆上报自己的状态以及业务执行的进度,服务端根据业务编号的进度,判断它执行到哪里了,然后决定是将历史业务再发给他,或者忽略。同时也能把控,在某些业务失败的情况下怎么处理。如果设备执行业务失败了,也应该主动上报执行失败的业务编号和原因。
不要把思路局限在依赖某个队列,或者某种缓存,来管理所有的业务