网站首页
管理程序
智能项目
上位机
CC2530
ESP8266
MQTT云服务
生活休闲
网站首页
>>
上位机
>>
c#电脑上位机
>>
查看详情
MQTT断线重连订阅无法接收
2019-12-03 12:04:41
本文链接:https://blog.csdn.net/A__yes/article/details/82109011
工具
MQTT客户端是用的 paho http://www.eclipse.org/paho/
问题
采用以下配置
connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setConnectionTimeout(10);
connOpts.setKeepAliveInterval(90);
connOpts.setAutomaticReconnect(true);
1
2
3
4
5
当网络断开后,客户端会进行重连,但是重连之前订阅的主题就失效了,不再接受之前订阅主题的消息。
解决方法
因为配置里将cleanSession 设为 true ,当客户端掉线时 ,服务器端会清除 客户端 session 。 重连后 客户端会有一个新的session。
第一种
把配置里的 cleanSession 设为false,客户端掉线后 服务器端不会清除session,当重连后可以接收之前订阅主题的消息。当客户端上线后会接受到它离线的这段时间的消息
第二种
通过查看 connect 方法的代码发现
这里写图片描述
如果我们设置的 callback实现了 MqttCallbackExtended接口,就会把它设置给connectActionListener,我再来看看MqttCallbackExtended接口。
这里写图片描述
可以看到这个接口拓展了一个方法,该方法会在连接到服务器成功时调用,正符合我们的要求。我只需要实现这个接口并在这个方法里从新订阅之前的主题就行了。
这种方法重连之后不会收到离线期间该主题的消息
————————————————
版权声明:本文为CSDN博主「A__yes」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/A__yes/article/details/82109011
点击免费电话咨询:13964326707
创同科技
鲁ICP备2023004006号-1
电话:0533-7081866 手机:13964326707
地址:淄博市临淄区齐陵路180号
技术支持:
创同科技
网站首页
一键拨号
联系我们
我的