【MQTT异常】mqtt.inbound.MqttPahoMessageDrivenChannelAdapter Lost connection: 已断开连接; retrying...

MqttPahoMessageDrivenChannelAdapter Lost connection: 已断开连接; retrying...的解决方案

一、背景描述

Springboot 集成 MQTT ,在服务端启动后,控制台一直在报 MQTT 已断开连接,在重试中ing。问题就是MQTT客户端频繁掉线、上线。

报错内容如下:

MQTT Rec: xxxxx org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter Lost connection: 已断开连接; retrying…

在这里插入图片描述

二、原因分析

原因一:clientID相同,即clientId重复导致

在这里插入图片描述

由于我和同事并行开发,使用的同一套代码,所以我们两个连接MQTT的clientId导致重复。

原因二:当前用户没有Topic权限

原因三:在回调函数内进行业务处理遇到异常并没有捕获

三、解决方案

3.1 方案一

针对原因一的解决方案是在全局使用的clientID保证唯一性,可以采用UUID/时间戳等方式。

实现方式有很多种,以下代码只是其中一种,可参考:

在这里插入图片描述
在这里插入图片描述
修改过后我们可以从EMQ Dashboard 页面查看clientId,如下所示:

在这里插入图片描述

3.2 方案二

针对原因二的解决方案是如果配置有acl权限,则查询当前登录mqtt用户是否具有订阅对应topic的权限,无权时也会造成一直频繁断线重连,如果没有权限时需要添加上对应的权限。

3.3 方案三

针对原因三的解决方案是在可能出现异常的语句块,进行try-catch捕获。

在这里插入图片描述

本文完结!

猜你喜欢

转载自blog.csdn.net/weixin_44299027/article/details/132832845