是的,MQTT管控端发的消息会保留离线消息。
MQTT支持会话保存(cleanStart)、会话超期(sessionExpire)、Qos等设置,可以实现移动端弱网络(或网络断开后再重连)的离线消息接收。
SendMessage 是发送消息,没有离线消息的讲法,可以先看下我上面贴的文档https://help.aliyun.com/zh/apsaramq-for-mqtt/product-overview/limits?spm=a2c4g.11186623.0.i2 ,此回答整理自钉群“阿里云 微消息队列 MQTT产品咨询群”
MQTT管控端发的消息会保留离线消息,具体取决于客户端和服务器的设置。
MQTT是一种轻量级的发布/订阅消息传输协议,广泛应用于物联网领域。在MQTT协议中,客户端与服务器之间建立连接后,服务器会为每个客户端维护一个会话。会话可以设置为持久会话或临时会话。
如果会话设置为持久会话,那么在客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。这样可以确保消息只会被客户端接收一次,即QoS=2(“只有一次”)的保证。如果会话设置为临时会话,那么在客户端断开时,会话自动销毁。
此外,在MQTT协议中,客户端还可以通过订阅QoS级别的设置来控制离线消息的接收。例如,QoS=0表示至多一次,即消息可能会被客户端多次接收;QoS=1表示至少一次,即消息至少会被客户端接收一次,但可能会被接收多次;QoS=2表示只有一次,即消息只会被客户端接收一次。
综上所述,MQTT管控端发的消息是否保留离线消息取决于客户端和服务器的设置。如果客户端使用持久会话并设置合适的QoS级别,那么离线消息将会被保留并传递给客户端。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/