MQTT 如何保证Qos?

MQTT是一种轻量级的机器间通信协议,适用于低带宽、不可靠网络环境下的远程传感器和控制设备通信。采用发布/订阅模式,支持三种服务质量级别,并具备小型传输特点。本文详细介绍了MQTT的主要特性和消息传递机制。
  • 轻量级的 machine-to-machine 通信协议。
  • publish/subscribe模式。
  • 基于TCP/IP。
  • 支持QoS。
  • 适合于低带宽、不可靠连接、嵌入式设备、CPU内存资源紧张。
  • 是一种比较不错的Android消息推送方案。
  • FacebookMessenger采用了MQTT。
  • MQTT有可能成为物联网的重要协议。

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;

2、对负载内容屏蔽的消息传输;

3、使用 TCP/IP 提供网络连接;

4、有三种消息发布服务质量:

    • “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

    • “至少一次”,确保消息到达,但消息重复可能会发生。

    • “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;

6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制

消息体

 

bit76543210
byte 1Message TypeDUP flagQoS levelRETAIN
byte 2Remaining Length

MessageType

MnemonicEnumerationDescription
Reserved0Reserved
CONNECT1Client request to connect to Server
CONNACK2Connect Acknowledgment
PUBLISH3Publish message
PUBACK4Publish Acknowledgment
PUBREC5Publish Received (assured delivery part 1)
PUBREL6Publish Release (assured delivery part 2)
PUBCOMP7Publish Complete (assured delivery part 3)
SUBSCRIBE8Client Subscribe request
SUBACK9Subscribe Acknowledgment
UNSUBSCRIBE10Client Unsubscribe request
UNSUBACK11Unsubscribe Acknowledgment
PINGREQ12PING Request
PINGRESP13PING Response
DISCONNECT14Client is Disconnecting
Reserved15Reserved

 

(1)QoS 0(At most once)“至多一次”
消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

(2)QoS 1(At least once)“至少一次”
确保消息到达,但消息重复可能会发生。

(3)QoS 2(Exactly once)“只有一次”
确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。

需要注意的是:

  • 这里指的是Client和Broker之间的关系,而不是Publisher和Subscriber之间的关系,在Pub/Sub模型中,Publisher和Subscriber是完全解耦的。
  • 发布者在每次发布消息时都需要设置QoS,订阅者在订阅主题时也可以设置QoS。
  • 发布者或者订阅者设置的QoS分别是和服务器端异步执行的。
  • 即使发布者设置发布消息为QoS2,订阅者也可以通过QoS0或QoS1来订阅该消息(这样就是QoS的降级downgrade)。
  • 订阅者一般来说最好使用QoS2。


以下是发布和订阅的时序图:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值