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

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

背景

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

问题

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


建连失败截图

解决方案

后端开发定位跟踪后反馈是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的,如下图。


设置MqttVersion

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容