MQTT(消息队列遥测传输)协议是建立在TCP协议之上,基于发布/订阅的一种数据传输协议。由于其实现简单,系统开销极低,所以非常适合用于对成本比较敏感的物联网应用场景。如今很多物联网设备与云端交互都是用的MQTT协议。由于在某些物联网场景,设备的网络环境往往受限,MQTT则提供了消息等级机制(QoS)来满足不同网络环境、不同应用场景下的传输需求。
MQTT消息等级MQTT提供了三类消息等级:
QoS 0:最多传输一次
只会发布一次。消息发布后发送方不会确保发布的消息对端是否收到。
QoS 1:最少收到一次
发布消息后,发布消息那一方会等待对方的PUBACK。在发送方的超时时间之内如果没有收到对端的PUBACK。发送方会重新发送消息以确保接收方能收到。
QoS 2:只收到一次
发布消息过程中收发双方会经过四次握手过程(PUBREC、PUBREL、PUBCOMP)来确保数据只会接收一次。在握手任一步骤出错或未收到数据,都会重启整个发送步骤,直到发送成功。
不同等级下的传输过程
不同QoS等级的特点及其适用场景QoS 0(At Most Once):
-优势:通讯机制简单,容易实现,对于流量消耗有限制的设备(比如通过4G传输的设备)能减少流量消耗。
-缺点:由于没有确认机制,数据可能不会到达订阅方(即使TCP有完整的重传机制)。
-适用场景:适用于对数据丢包不敏感的场景如:数据实时监测,传感器采集上报,日志记录等。
QoS 1(At Least Once):
-优势:发布数据时有PUBACK机制,可以确保数据的到达。
-缺点:发送方有可能没收到接收方的PUBACK从而导致接收方可能同一条消息收到多次。
-适用场景:适用于对数据的重复性要求不高,但对可靠性有一定要求的场景如:开关状态同步等。
QoS 2(Exactly Once):
-优势:基于复杂且完善的数据发布过程,可以确保发布的消息不会丢失与重复。
-缺点:由于传输机制相对复杂,传输效率较低。
-适用场景:对消息的丢失或重复不能接受的场景如:交易订单、在线聊天(如QQ、微信)。
总结在了解了MQTT在不同QoS等级下的消息收发机制后,我们在基于MQTT协议做应用时就能更好的选择适合应用场景的消息等级。
【福利】蓝牙+Wi-Fi模块王炸福利!免费送样