【MQTT异常】mqtt.inbound.MqttPahoMessageDrivenChannelAdapter Lost connection: 已断开连接; retrying...
  S6BL6xF7arqO 2023年11月02日 66 0



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

  • 一、背景描述
  • 二、原因分析
  • 三、解决方案
  • 3.1 方案一
  • 3.2 方案二
  • 3.3 方案三


一、背景描述

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

报错内容如下:

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

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

二、原因分析

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

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

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

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

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

三、解决方案

3.1 方案一

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

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

【MQTT异常】mqtt.inbound.MqttPahoMessageDrivenChannelAdapter Lost connection: 已断开连接; retrying..._解决方案_03


【MQTT异常】mqtt.inbound.MqttPahoMessageDrivenChannelAdapter Lost connection: 已断开连接; retrying..._解决方案_04


修改过后我们可以从EMQ Dashboard 页面查看clientId,如下所示:

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

3.2 方案二

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

3.3 方案三

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

【MQTT异常】mqtt.inbound.MqttPahoMessageDrivenChannelAdapter Lost connection: 已断开连接; retrying..._并行开发_06

本文完结!


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
S6BL6xF7arqO