paho创建MQTTClient客户端时clientId长度等于24无响应问题解决

Paho项目旨在为机器对机器(M2M)和物联网(IoT)提供可靠的开放和标准消息传递协议的开源实现。Paho解决设备连接的物理和成本限制,其目标包括设备和应用程序之间的有效解耦,旨在保持市场开放,并鼓励可扩展的Web和企业中间件和应用程序的快速增长。

背景

在对artemis项目测试过程中,逐步对mqtt协议有所了解,于是使用paho对其进行封装,开发了一个mqtt协议的功能测试框架。

问题

在MQTTClient客户端创建过程中,clientId设置为“MQTTPublishSubscribeTest001”时,服务器没有返回任何信息,客户端一直在建立连接状态,但是连不上。如下图:


paho创建MQTTClient客户端时clientId长度等于24无响应问题解决_第1张图片
建连失败截图

解决方案

后端开发定位跟踪后反馈是clientId太长的问题,于是缩短测试用例中的clientId,发现可行,但是不应该不支持clientId长度在24以上的MQTTClient客户端。查询相关资料,得出解决方案如下:

MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);

connOpts添加设置

MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setMqttVersion(4);
connOpts.setCleanSession(true);

总结

问题解决,但是paho官网上的示例与官方提供的mqtt服务器却能在clientId长度超出的情况下正常连接并通信。不知道是否是服务端处理了,后续需对mqtt相关以及物联网相关继续深入学习。

but

查看paho源码org.eclipse.paho.client.mqttv3.internal下的ConnectActionListener类,发现默认情况下是会先尝试MqttVersion为3.1.1的,失败后会使用MqttVersion为3.1的,如下图。


paho创建MQTTClient客户端时clientId长度等于24无响应问题解决_第2张图片
设置MqttVersion

所以设置MqttVersion为3.1.1是为了防止失败时用3.1重试。这也是为何官网示例没问题的原因吧。

你可能感兴趣的:(paho创建MQTTClient客户端时clientId长度等于24无响应问题解决)