mqtt 出现 invalid clientIdetifier: “xxxxx“ 报错问题解决

博客内容讲述了在遇到MQTT 3.1版本中clientID长度超过23字符导致的错误时,如何进行排错。作者检查了官方文档并分析了代码,发现MQTT 3.1.1和5.0版本没有clientID长度限制。解决方案包括升级MQTT版本或缩短clientID。

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

出现如下图片报错

在这里插入图片描述

排错方式:

1.根据官方文档,查看 mqtt 给出的文档可以知晓,如图:

官方在 3.1版本中给出 client id 不能超过 23 ,故设定的 client id 长度超过了 23
在这里插入图片描述

在这里插入图片描述

2.根据代码查看 debug 调试

在这里插入图片描述查看验证方法:

    static boolean isValidClientId(MqttVersion mqttVersion, int maxClientIdLength, String clientId) {
        if (mqttVersion == MqttVersion.MQTT_3_1) {
            return clientId != null && clientId.length() >= MIN_CLIENT_ID_LENGTH &&
                clientId.length() <= maxClientIdLength;
        }
        if (mqttVersion == MqttVersion.MQTT_3_1_1 || mqttVersion == MqttVersion.MQTT_5) {
            // In 3.1.3.1 Client Identifier of MQTT 3.1.1 and 5.0 specifications, The Server MAY allow ClientId’s
            // that contain more than 23 encoded bytes. And, The Server MAY allow zero-length ClientId.
            return clientId != null;
        }
        throw new IllegalArgumentException(mqttVersion + " is unknown mqtt version");
    }

可以看到 这段代码判断是否为 3.1.1 或者 5.0 版本的 mqtt,这两个版本的 mqtt 的 clientId没有长度限制,只有 mqtt 3.1版本的有 长度小于 23 的限制。

总结

1.查看 mqtt 版本,是否为 mqtt 3.1 版本,若为 3.1,可以升级到 3.1.1或者 5.0版本
2.缩减 clientId 的长度,让其小于 23.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值