1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| 一. 每次连接时候 clientID需要不一样,不然会被服务端认为没有离线,会发送之前的消息。 可以在消费端通过设置QoS和cleanSession两个参数来决定客户端是否需要获取离线消息。 表 1. QoS和cleanSession的组合关系
| QoS 级别 | cleanSession = true | cleanSession = false | |----------|-------------------|--------------------| | QoS 0 | 无离线消息,在线消息只尝试推一次 | 有离线消息,在线消息只尝试推一次 | | QoS 1 | 无离线消息,在线消息保证可达 | 有离线消息,所有消息保证可达 | | QoS 2 | 无离线消息,在线消息保证可达且只接收一次 | 暂不支持 |
## 说明
1. **QoS 0** - 最低的服务质量。消息最多发送一次,不会重试。 - 不保证消息到达,不适合重要消息。
2. **QoS 1** - 消息至少到达一次。在线时保证投递成功。 - cleanSession=false 时,客户端离线期间的消息也会被服务器保留并投递。
3. **QoS 2** - 消息确保只到达一次。适合需要严格唯一性的消息。 - cleanSession=false 时,部分平台暂不支持 QoS2 离线消息。
4. **CleanSession** - true:每次连接会创建新的会话,断开连接时不会保留订阅和未发送的消息。 - false:服务器保留会话信息,离线消息会被存储并在客户端下次连接时发送。
|