MQTT QoS 0、1、2 解析:快速入门指南

引言

在不稳定的网络环境中,使用 TCP 传输协议的 MQTT 备可能会面临确保可靠通信的挑战。为了解决这个问题,MQTT 引入了一种 QoS 机制,提供多种消息交互选项,以满足用户在不同场景下对可靠消息传递的特定要求。

在本文中,我们将探讨 MQTT 的 QoS 等级 0、1 和 2,比较它们的性能,并提供实际用例,帮助您决定最适合您物联网项目的选项。

MQTT QoS 简介

MQTT 中的 QoS 指的是发布者与订阅者之间消息传递的保证级别。它提供三个服务级别:

  • QoS 0 – 最多交付一次
  • QoS 1 – 至少交付一次
  • QoS 2 – 只交付一次

其中,使用 QoS 0 可能丢失消息,使用 QoS 1 可以保证收到消息,但消息可能重复,使用 QoS 2 可以保证消息既不丢失也不重复。QoS 等级从低到高,不仅意味着消息可靠性的提升,也意味着传输复杂程度的提升。

在一个完整的从发布者到订阅者的消息投递流程中,QoS 等级是由发布者在 PUBLISH 报文中指定的,大部分情况下 Broker 向订阅者转发消息时都会维持原始的 QoS 不变。不过也有一些例外的情况,根据订阅者的订阅要求,消息的 QoS 等级可能会在转发的时候发生降级。

例如,订阅者在订阅时要求 Broker 可以向其转发的消息的最大 QoS 等级为 QoS 1,那么后续所有 QoS 2 消息都会降级至 QoS 1 转发给此订阅者,而所有 QoS 0 和 QoS 1 消息则会保持原始的 QoS 等级转发。

MQTT QoS 降级

接下来,让我们来看看 MQTT 中每个 QoS 等级的具体原理。

MQTT QoS 等级详解

QoS 0 - 最多交付一次

QoS 0 是最低的 QoS 等级。QoS 0 消息即发即弃,不需要等待确认,不需要存储和重传,因此对于接收方来说,永远都不需要担心收到重复的消息。

MQTT QoS 0

为什么 QoS 0 消息会丢失?

当我们使用 QoS 0 传递消息时,消息的可靠性完全依赖于底层的 TCP 协议。

而 TCP 只能保证在连接稳定不关闭的情况下消息的可靠到达,一旦出现连接关闭、重置,仍有可能丢失当前处于网络链路或操作系统底层缓冲区中的消息。这也是 QoS 0 消息最主要的丢失场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值