mqtt开发总结

本文总结了MQTT开发中遇到的问题,包括同一设备创建多次client、断线重连死循环、关闭客户端导致内存泄漏等。解决方案包括使用MqttCallbackExtended进行自动重连、避免手动重连操作以及在应用退出时不关闭MQTT服务以防止内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码解析博客推荐

https://juejin.im/post/5cd66c4af265da037516bec3

1.遇到的问题

1.1同一设备,多次创建mqtt client

在最开始的代码实现中,发现同一个设备有两个client。因为我在client的定义上有增加timestamp作为参数的一部分,而timestamp在获取的时候是根据当前时间动态获取的,这导致我在service多次启动中,创建了多个client。

在mqtt的client中,一个clientID可以创建一个mqtt的连接,如果出现了两个以上,那么说明一定是clientID不同导致的。

1.2断线重连导致陷入死循环

 

最开始设计断线重连的时候,client调用的callback是:mqttcallback,这个回调需要手动处理断线重连状态。

​
//订阅主题的回调【setAutomaticReconnect设置false调用该回调】
    private MqttCallback mqttCallback = new MqttCallback() {
        @Override
        public void connectionLost(Throwable cause) {
            LogUtils.d("mqtt", "mqttCallback>>连接中断");
            //doClientConnect();//再次连接,这种写法会导致异常:不停的断线重连
//            try {
//                Thread.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值