MQTT QoS(服务质量)介绍
MQTT 协议 中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性,QoS 的设计是 MQTT 协议里的重点。作为专为物联网场景设计的协议,MQTT 的运行场景不仅仅是 PC,而是更广泛的窄带宽网络和低功耗设备,如果能在协议层解决传输质量的问题,将为物联网应用的开发提供极大便利。
MQTT QoS 等级
MQTT 设计了 3 个 QoS 等级。
- QoS 0:消息最多传递一次,如果当时客户端不可用,则会丢失该消息。
- QoS 1:消息传递至少 1 次。
- QoS 2:消息仅传送一次。
QoS 0 是一种 "fire and forget" 的消息发送模式:Sender (可能是 Publisher 或者 Broker) 发送一条消息之后,就不再关心它有没有发送到对方,也不设置任何重发机制。
QoS 1 包含了简单的重发机制,Sender 发送消息之后等待接收者的 ACK,如果没收到 ACK 则重新发送消息。这种模式能保证消息至少能到达一次,但无法保证消息重复。
QoS 2 设计了重发和重复消息发现机制,保证消息到达对方并且严格只到达一次。
工作原理
QoS 0 - 最多分发一次
当 QoS 为 0 时,消息的分发依赖于底层网络的能力。发布者只会发布一次消息,接收者不会应答消息,发布者也不会储存和重发消息。消息在这个等级下具有最高的传输效率,但可能送达一次也可能根本没送达。
Qos 1 - 至少分发一次
当 QoS 为 1 时,可以保证消息至少送达一次。MQTT 通过简单的 ACK 机制来保证 QoS 1。发布者会发布消息,并等待接收者的 PUBACK 报文的应答,如果在规定的时间内没有收到 PUBACK 的应答,发布者会将消息的 DUP 置为 1 并重发消息。接收者接收到 QoS 为 1 的消息时应该回应 PUBACK 报文,接收者可能会多次接受同一个消息,无论 DUP 标志如何,接收者都会将收到的消息当作一个新的消息并发送 PUBACK 报文应答。
QoS 2 - 只分发一次
当 QoS 为 2 时,发布者和订阅者通过两次会话来保证消息只被传递一次,这是最高等级的服务质量,消息丢失和重复都是不可接受的。使用这个服务质量等级会有额外的开销。
发布者发布 QoS 为 2 的消息之后,会将发布的消息储存起来并等待接收者回复 PUBREC 的消息,发送者收到 PUBREC 消息后,它就可以安全丢弃掉之前的发布消息,因为它已经知道接收者成功收到了消息。发布者会保存 PUBREC 消息并应答一个 PUBREL,等待接收者回复 PUBCOMP 消息,当发送者收到 PUBCOMP 消息之后会清空之前所保存的状态。
当接收者接收到一条 QoS 为 2 的 PUBLISH 消息时,他会处理此消息并返回一条 PUBREC 进行应答。当接收者收到 PUBREL 消息之后,它会丢弃掉所有已保存的状态,并回复 PUBCOMP。
无论在传输过程中何时出现丢包,发送端都负责重发上一条消息。不管发送端是 Publisher 还是 Broker,都是如此。因此,接收端也需要对每一条命令消息都进行应答。
QoS 在发布与订阅中的区别
MQTT 发布与订阅操作中的 QoS 代表了不同的含义,发布时的 QoS 表示消息发送到服务端时使用的 QoS,订阅时的 QoS 表示服务端向自己转发消息时可以使用的最大 QoS。
- 当客户端 A 的发布 QoS 大于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 B 的订阅 QoS。
- 当客户端 A 的发布 QoS 小于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 A 的发布 QoS。
不同情况下客户端收到的消息 QoS 可参考下表:
发布消息的 QoS | 主题订阅的 QoS | 接收消息的 QoS |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
0 | 2 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
1 | 2 | 1 |
2 | 0 | 0 |
2 | 1 | 1 |
2 | 2 | 2 |
如何选择 MQTT QoS 等级
QoS 级别越高,流程越复杂,系统资源消耗越大。应用程序可以根据自己的网络场景和业务需求,选择合适的 QoS 级别。
以下情况下可以选择 QoS 0
- 可以接受消息偶尔丢失。
- 在同一个子网内部的服务间的消息交互,或其他客户端与服务端网络非常稳定的场景。
以下情况下可以选择 QoS 1
- 对系统资源消耗较为关注,希望性能最优化。
- 消息不能丢失,但能接受并处理重复的消息。
以下情况下可以选择 QoS 2
- 不能忍受消息丢失(消息的丢失会造成生命或财产的损失),且不希望收到重复的消息。
- 数据完整性与及时性要求较高的银行、消防、航空等行业。
MQTT QoS(服务质量)介绍相关推荐
- QoS 服务质量介绍说明
QoS 服务质量介绍说明 前言 QoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力, 是网络的一种安全机制, 是用来解决网络延迟 ...
- MQTT QoS服务质量
MQTT(Quality of Service)设计了三个等级: QoS 0:消息最多传递一次,如果当时客户端不可用,则会丢失该消息. QoS 1:消息传递至少 1 次. QoS 2:保证消息到达对方 ...
- MQTT QoS 设计:车联网平台消息传输质量保障
在本专题系列文章中,我们将根据 EMQ 在车联网领域的实践经验,从协议选择等理论知识,到平台架构设计等实战操作,与大家分享如何搭建一个可靠.高效.符合行业场景需求的车联网平台. 在此之前,我们已经介绍 ...
- MQTT QoS 详解
本文主要介绍 MQTT 协议中 QoS(服务质量) 的详细内容. 1.概述 MQTT 协议 中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性,Q ...
- MQTT Qos类型解释
MQTT Qos类型解释 原文连接: https://blog.csdn.net/yangguosb/article/details/78653228 内容: Qos0 发送者只发送一次消息,不进行重 ...
- Kubernetes Resource QoS Classes介绍
2019独角兽企业重金招聘Python工程师标准>>> Kubernetes Resource QoS Classes介绍 @(Kubernetes) 基本概念 Kubernetes ...
- QoS服务质量二令牌桶算法及QoS业务分类
QoS服务质量二令牌桶算法及QoS业务分类 2.3.3.DiffServ模型令牌桶算法 2.3.4.基于DiffServ模型的QoS组成 2.3.3.DiffServ模型令牌桶算法 令牌桶算法是网络流 ...
- QoS服务质量三DiffServ模型报文的标记及PHB
QoS服务质量三DiffServ模型报文的标记及PHB 2.3.5.报文的标记方法 2.3.5.1.IP Prececence 2.3.5.2.DSCP 2.3.5.3.IPv6报文 2.3.5.4. ...
- QoS服务质量四QoS边界行为之流量监管
QoS服务质量四QoS边界行为之流量监管 二.QoS域边界节点的功能和行为 1.流分类 1.1.简单流分类 1.2.复杂流分类 2.流量监管 2.1.标记 2.1.1.流量监管工具CAR 2.1.1. ...
- QoS服务质量五QoS边界行为之流量整形
QoS服务质量五QoS边界行为之流量整形 3.流量整形 3.1.GTS的原理 3.2.自适应流量整形 3.3流量监管和流量整形应用场景 3.4.配置限速(流量监管和流量整形) 3.4.1.配置流量整形 ...
最新文章
- 安卓开源项目周报0411
- BMP文件的读取与显示
- BZOJ 3731: Gty的超级妹子树
- C++设计模式--适配器模式
- 第十八篇 Linux环境下常用软件安装和使用指南
- mysql中设置字符_MySQL中设置默认字符集的方法
- java在创建对象时必须_Java中5种创建对象的方式
- 国漫《大闹天宫》4K修复版上线西瓜视频、鲜时光
- 如果量子计算机成功应用,这世界上还有普通人的生存空间吗?
- jquery点击按钮显示和隐藏div
- 梦笔记2022-2-1
- nvm 下载node 下载不下来_音乐下载 黄子韬爸妈可以不走吗
- 数据挖掘FPGrowth算法JAVA实现
- LoRa网关与服务器通信——MQTT
- 【单例模式、多例模式、工厂模式和枚举】
- parallel循环java_使用Java8新特性parallelStream遇到的坑
- BUUCTF 荷兰宽带数据泄露
- mysql orm_从MySQL到ORM(二):MySQL基础
- 泛泰SKYA830黑砖QHSUSB_DLOAD救砖教程
- 基于JAVA竞赛信息发布及组队系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
热门文章
- 什么是软件即服务(SaaS) ? SaaS新手入门指南
- python相减函数subs,SUBS(subs是什么函数)
- eWebEditor编辑器的使用
- 1015 计算摄氏温度值
- zjnu 1779 KRUŽNICE(线段树成段更新+离散化)
- 明珠三国java最新_新明珠三国下载-新明珠三国最新版下载v5.0-三国在线
- 哇!家居环境居然能“可视化”?这守护真的牛
- note同步不及时 one_解决无法同步 OneNote 的问题
- C++ OpenCV遍历并处理一个文件夹中的所有图片
- C/C++/Linux工程师学习资料干货路线这都有,从入门到实战!【CSDN宝藏资料图鉴第二期】