如何将MQTT客户端的Clean Session参数设置为false?
关于MQTT客户端设置clean-session为false的问题
好问题!咱们来拆解一下你的疑问:
1. 如何设置clean-session为false?
你用的efrecon/mqtt-client工具提供了直接的命令行参数来控制clean-session,操作很直接:
- 最简洁的方式是添加
--no-clean参数,这直接等价于将clean-session设为false; - 也可以用
--clean false,效果完全相同,只是写法更明确。
修改后的完整命令如下:
docker run -it --rm --name mqtt-publisher --network \ fiware_default efrecon/mqtt-client pub -h mosquitto -m "c|1234" \ -t "/4jggokgpepnvsb2uv4s40d59ov/motion001/attrs" -q 2 -r -d --no-clean
2. 能不能通过请求负载设置clean-session?
答案是不行。因为在MQTT协议里,clean-session属于连接层面的参数,是客户端和Broker建立TCP连接时就需要协商确定的属性,和你发送的消息负载(也就是-m后面的内容)完全是两个独立层面的东西。消息负载只是你要传递的业务数据,根本无法影响连接阶段的配置项。
额外补充一句:当clean-session设为false时,Broker会保留该客户端的订阅信息以及未完成的QoS 1/2消息,下次客户端用同一个Client ID重新连接时,Broker会自动恢复这些状态,继续处理未完成的消息。
内容的提问来源于stack exchange,提问作者Monika
相关产品推荐
相关产品推荐

