设置 cleanSession
参数为 true
对MQTT协议的行为和计费有什么影响?
设置 cleanSession
参数为 true
[1][2][3] 对MQTT协议的行为和计费有以下影响:
QoS=0
时,无论 cleanSession
如何设置,计费倍率都是1。而当 QoS=1
且 cleanSession=true
,计费倍率是2;如果设置 QoS=2
并且按照文档逻辑推断,即使不支持 cleanSession=false
的组合,理论上应提及的配置(尽管不被支持)计费倍率为5。这意味着,启用 cleanSession=true
通常会导致在某些QoS级别下较低的计费成本。 cleanSession=true
,客户端与服务器之间的会话状态在客户端断开连接后不会被保存。这意味着每次客户端重新连接时,都会被视为一个新的会话,之前的所有订阅关系和未接收的消息都将丢失。 离线消息处理:配合不同的 QoS
级别,如果 cleanSession=true
,客户端不会接收离线期间发布的消息。具体来说,QoS=0
和 QoS=1
时,无论 cleanSession
如何设置,客户端离线时都不会存储消息;而 QoS=2
(虽然与 cleanSession=false
组合不被支持)表明在正常情况下不处理离线消息,但计费上做了特别说明。
综上所述,通过 setCleanSession(true)
指令,您指示MQTT客户端在断开连接后不保留会话状态,这将影响客户端重连后的订阅关系和离线消息的处理,并可能带来计费上的优化,尤其是在考虑消息可靠性和持久性的不同需求时。
https://help.aliyun.com/zh/apsaramq-for-mqtt/product-overview/service-introduction-terms
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。