MQTT 5.0协议相比之前的版本(如MQTT 3.1.1)增加了很多属性,这些属性分布于报文的可变头部(Variable Header)和有效载荷(Payload)中。这些属性大大增强了协议的可扩展性和灵活性,使其能够更好地适应现代物联网应用的复杂需求。
属性的定义在源码包mosquitto-2.0.18/include/mqtt_protocol.h中,如下所示:
下面简单验证下响应主题(Response Topic)MQTT_PROP_RESPONSE_TOPIC,相关数据(Correlation Data)MQTT_PROP_CORRELATION_DATA的使用方式。
在 MQTT5.0 中,请求方可以在请求消息中指定一个自己期望的响应主题(Response Topic)。响应方根据请求内容采取适当的操作后,向请求中携带的响应主题发布响应消息。
请求方还可以在请求中携带关联数据 (Correlation Data),响应方必须在响应中将关联数据原封不动地返回,请求方因此可以识别响应所属的原始请求。
1.解压mosquitto-2.0.18.tar.gz源码包,tar xzvf mosquitto-2.0.18.tar.gz,解压后会生成一个mosquitto-2.0.18文件夹。
2.进入mosquitto-2.0.18目录,执行make clean;make;make install,这样就安装好了。
系统下就有了mosquitto mosquitto_passwd mosquitto_pub mosquitto_rr mosquitto_sub这些指令。
3.开启mqtt服务器。
执行mosquitto -c /etc/mosquitto/mosquitto.conf& 启动MQTT服务器。默认端口是1883。
4.关联数据属性测试
4.1订阅客户端命令格式如下:
mosquitto_sub -F %D -t "mqttv5_sub" -V 5
其中mosquitto_sub 为订阅指令,
-F 表示输出格式
%D 表示为MQTT v5版本中定义的correlation-data 属性
-t "mqttv5_sub" 指定订阅的主题为"mqttv5_sub"
-V 5 指定当前使用MQTT v5的协议。
4.2发布客户端命令格式如下所示:
mosquitto_pub -t "mqttv5_sub" -V 5 -m "message payload" -D publish correlation-data "correlation data"
其中mosquitto_pub为客户端发布消息的指令。
-t "mqttv5_sub"指定发布的主题为"mqttv5_sub"
-V 5 指定当前使用MQTT v5的协议。
-m "message payload" 指定发布的消息。
-D publish correlation-data 指定发布当前消息时需要携带的关联数据,"correlation data"
为关联数据的内容。
测试结果如下所示:
发布:
订阅:
5.响应主题(Response Topic)测试。
5.1订阅端的指令格式如下:
mosquitto_sub -F %R -t "mqttv5_sub" -V 5
其中mosquitto_sub 为订阅指令,
-F 表示输出格式
%R 表示为MQTT v5版本中定义的Response Topic 属性
-t "mqttv5_sub" 指定订阅的主题为"mqttv5_sub"
-V 5 指定当前使用MQTT v5的协议。
5.2发布客户端命令格式如下所示:
mosquitto_pub -t "mqttv5_sub" -V 5 -m "m