基础概念
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)协议,基于发布/订阅模式的通讯协议,它被设计用于有限的带宽和不稳定网络环境中,非常适合物联网(IoT)设备之间的通信,使用服务质量级别保证了消息的可靠传输。
特点:
轻量级:MQTT的消息头部很小,可以减少设备的带宽和功耗,适合在嵌入式设备上使用。
发布/订阅模式:允许一个设备通过发布消息到一个主题,同时多个设备可以订阅这个主题来接收消息。
可靠性:支持三种不同的服务质量级别,确保消息的可靠传输。
异步通信:发布者和订阅者不需要同时在线,消息会被存储在服务器上,直到订阅者成功接收。
简单易用:协议简单,使用各种编程语言均能实现。
应用广泛:物联网、移动通信、远程监控等多个领域
消息质量等级
MQTT 有哪些消息质量等级Qos?解释它们的含义
(1)至多一次 00
发送方发送完消息就不管了,接收方不用确认,因此消息可能会丢失,最多传递一次。
适用于对消息丢失不敏感的场景,如传感器数据采集。
(2)至少一次 01
发送方发送消息后会等待订阅方确认(PUBACK),否则会重新发送消息。
适用场景:适用于不接受消息丢失,但允许偶尔重复的场景,如设备状态更新。
(3)正好一次 10
发送方发送消息后,通过三次确认保证消息仅传递一次:
PUBREC(消息接收确认):接收方接收到消息后,发送 PUBREC 确认。此时,接收方已收到消息,但还未处理。
PUBREL(释放确认):发送方收到 PUBREC 后,发送 PUBREL 消息给接收方。这表示发送方已经得知接收方收到消息,并准备释放已发送的消息。
PUBCOMP(完成确认):接收方收到 PUBREL 后,发送 PUBCOMP 消息给发送方,确认整个消息传递流程已经完成,并且设别已成功执行相应操作。
发送方需要订阅方的两次确认,第一固定报文次确认,为了确认订阅方收到了消息,第二次确认,为了确认订阅方已成功执行了命令。
适用于对消息传递准确性要求极高的场景,如设备关键控制指令。
注意: QoS是Sender和Receiver之间的协议,而不是Publisher和Subscriber之间的协议。换句话说,Publisher发布了一条QoS1的消息,只能保证Broker能至少收到一次这个消息;而对于Subscriber能否至少收到一次这个消息,还要取决于Subscriber在Subscibe的时候和Broker协商的QoS等级
遗嘱消息
一个设备断开后,向某个主题发送该消息。
保留消息
一个设备连接时,向某个主题发送消息。
MQTT 报文格式
报文格式:固定报头 + 可变报头 + 载荷(可选)