cleanSession的语义
cleanSession标志是MQTT协议中对一个消费者客户端建立TCP连接后是否关心之前状态的定义,与消息发送端的设置无关。具体语义如下: - cleanSession=true:消费者客户端再次上线时,将不再关心之前所有的订阅关系以及离线消息。(服务器不保存之前的topic历史关系和不存储离线消息,客户连接需要重新订阅topic且不会收到离线消息) - cleanSession=false:消费者客户端再次上线时,还需要处理之前的离线消息,而之前的订阅关系也会持续生效。(服务器会保存之前的topic订阅关系,客户端连接之后不需要重新订阅topic,且会收到离线消息)
cleanSession 与 Qos 配置的关系
QoS级别 | cleanSession=true | cleanSession=false |
---|---|---|
QoS0 | 无离线消息,在线消息只尝试推一次。 | 无离线消息,在线消息只尝试推一次。 |
QoS1 | 无离线消息,在线消息保证可达。 | 有离线消息,所有消息保证可达。 |
QoS2 | 无离线消息,在线消息保证只推一次。 | 有离线消息,所有消息保证只推一次。(也需要服务器支持该功能才有效) |
MQTT发布消息QoS保证不是端到端的,是客户端与服务器之间的。订阅者收到MQTT消息的QoS级别,最终取决于发布消息的QoS和主题订阅的QoS。
发布消息的 QoS | 主题订阅的 QoS | 接收消息的 QoS |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
0 | 2 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
1 | 2 | 1 |
2 | 0 | 0 |
2 | 1 | 1 |
2 | 2 | 2 |
特点:
特点:
特点:
推荐使用 docker 的方式,部署简单,一条命令搞定。
|
|