出现如下图片报错
排错方式:
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.