MQTT服务质量-QoS

QoS是消息发送方和接收方之间的协议,定义了指定消息发送保证等级。本文将深入探究MQTT中不同的QoS等级。

QoS是什么

MQTT提供三个QoS等级:

  • 最多一次(QoS 0)
  • 至少一次(QoS 1)
  • 确切一次(QoS 2)

在MQTT中如何检查消息发送

当讨论MQTT中的QoS时,很重要的是考虑消息从发布的客户端到代理(broker)、从代理(broker)到订阅的客户端。这两方面的消息发送和微秒的区别。
发布消息到代理(broker)的客户端定义了消息传输期间的QoS等级。代理(broker)然后将消息传输给订阅的客户端,使用的QoS等级是由订阅的客户端在订阅过程时定义的。如果订阅的客户端定义的QoS等级低于发布的客户端,代理(broker)将会使用低等级的QoS传输消息。
理解了消息在MQTT中是如何传递的,为理解QoS级别在确保发布客户端、代理(broker)和订阅客户端之间的可靠通信方面的重要性奠定了基础。

为什么QoS重要

QoS对MQTT很重要,因为它的作用是让客户端能够选择符合网络可靠性和应用程序需求的服务级别。MQTT的固有能力,即使在不可靠的网络条件下,也能处理消息重新传输并确保发送,使QoS对于在这种具有挑战性的环境中促进无缝通信至关重要。通过提供不同的QoS等级,MQTT授权客户端优化其网络应用,达到稳定性和有效性之间理解的平衡。
现在,我们理解了QoS在MQTT中意义,让我们深入了解QoS的工作机制,探究它在各种网络条件下,如何确保稳定的消息传输的。

QoS 0如何工作

在最低等级,在MQTT中,QoS 0提供了一种尽力而为的机制,在该机制中,发送方不期望对消息的传递的确认或保证。这意味着接收方不确认其收到了消息,发送方不保存或重发消息。QoS 0,通常被称为“即发即弃”,其功能类似于底层TCP协议,在该协议中发送消息时无需进一步跟进或确认。
1.PNG

QoS 1如何工作

QoS 1,重点在确保消息至少发送一次到接收方。当一条消息以QoS 1发布时,发布方保存一个复本直到它接收到一条来自接收方的PUBACK包,确认消息成功接收。如果发送方在合理时间内没有收到PUBACK包,它会重新发送该消息来确保它的发送。
2.PNG
一旦收到消息,接收方可以立即进行处理。比如,如果接收方是一个MQTT代理(broker),它会分发消息到所有的订阅客户端,然后用一个PUBACK包响应,确认收到这条消息。
puback_packet.png
需要注意的是,在QoS 1中,如果发布客户端又发送了相同的消息,设置了一个重复(DUP)标志,但是这个标志是为了内部目的,不被代理(broker)或客户端处理。无论DUP标志如何,接收方仍会发送PUBACK包以确认收到消息,从而确保发送方知道成功传递。QoS 1的这种方法在可靠性和效率之间取得了平衡,确保至少一次到达接收方,同时允许适当处理潜在的重复项。

QoS 3如何工作

在MQTT中,QoS 2提供最高的等级,确保每条消息都被准确的发送一次到指定的接收者。为了达到这个目的,QoS 2涉及发送方和接收方之间四次握手。
3.PNG
当接收方从发送方收到一个QoS 2等级的PUBLISH数据包,它处理发布的数据,用一个PUBREC数据包响应发送方,确认PUBLISH数据包。如果发送方没有从接收方收到PUBREC数据包,它就会再次发送有一个重复(DUP)标志的PUBLISH数据包,直接收到确认。

发送方一旦收到PUBREC数据包,就可以安全的抛弃原来的PUBLISH数据包。发送方存储来自接收方的PUBREC数据包,以一个PUBREL数据包作为响应,接收方抛弃所有存储的状态,用一个PUBCOMP数据包作为响应。

当接收方收到PUBREL数据包,就会抛弃所有存储的状态,用一个PUBCOMP数据包作为响应。直到接收方完成处理,发送一个PUBCOMP数据包到发送方之前,接收方会存储对原始PUBLISH数据包的数据包标识符的引用。这一步避免了重复处理这个消息。
当发送方收到PUBCOMP数据包,已发送消息的数据包标识符就可以再次使用。

当QoS 2流程完成,双方就会确认消息已被发送,发送方也确认这个方法。
如果数据库包丢失,在规定的时间内发送方负载重新发送这条消息,无论发送方是一个MQTT客户端还是MQTT代理(broker)。接收方有责任相应的响应每个命令消息。

MQTT中QoS的关键考虑因素

当去理解MQTT中的QoS时,有几个重要的方面需要考虑。

QoS降级

发送方和接收方定义的QoS等级能够不同。发送消息到代理(broker)的客户端定义QoS,但是代理(broker)使用的QoS是接收方在订阅时定义的。比如,如果发送方使用的QoS 2,接收方使用QoS 1订阅,代理(broker)使用QoS 1发送消息到接收方。这就可能导致向接收方多次传递同一消息。

数据包标识符在每个客户端是唯一的

在一次指定客户端和代理(broker)的交互中,QoS 1和QoS 2使用的数据包标识符是唯一的。但是,在所有的客户端中不是唯一的。一旦一个流程结束,数据包标识符就可以再次使用。这就是为什么数据包标识符不需要超过65535,因为对于一个客户端来说,发送超过这个数量的消息且都没有完成是不太现实的。

使用QoS的最佳实践

经常被问到如何选择正确的QoS等级。选择合适的QoS等级依赖于具体的应用场景。下面是一些导则帮你做出合适的决定:

何时使用QoS 0

  • 发送方和接收方拥有完全或基本可靠的连接。QoS 0的一个经典用例是通过有线连接将测试客户端和前端应用程序连接到MQTT代理(broker).
  • 如果你不介意一些消息偶尔的丢失。一些消息的丢失是可接受的,如果数据不是那么重要或数据在较短间隔内发送。
  • 不需要消息队列。仅当断开连接的客户端具有QoS 1或QoS 2和持久会话时,才会为断开连接的客户端排队。

何时使用QoS 1

  • 你需要获取每条消息且你的用例能够处理重复消息。QoS 1是最常用的,因为它保证每条消息至少送达一次,但允许重复发送。当然,你的应用程序必须忍受重复并能够进行相应的处理。
  • 你无法承受QoS的开销。QoS 1传递消息的速度比QoS 2快得多。

何时使用QoS 2

  • 对你的程序来说,所有消息准确的接收一次非常重要。如果重复发送可能会损害应用程序用户或订阅的客户端。注意这其中的开销,QoS 2的交互会消耗更多的时间。

QoS 1和QoS 2的消息队列

对于离线的客户端,所有以QoS 1和QoS 2发送的消息都会排队,直到客户端再次可用。但是,只有当客户端有持续会话时,这些队列才可能。

结论

本文主要介绍了服务质量,即QoS。三个等级的QoS的工作原理,发送方和接收方的交互过程。对如何选择合适的QoS等级提了一些建议。接下来的文章,我们会介绍QoS相关的MQTT中的持续会话。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科技提升安全,基于YOLOv5系列模型【n/s/m/l/x】开发构建商超扶梯场景下行人安全行为姿态检测识别系统

在商超等人流量较为密集的场景下经常会报道出现一些行人在扶梯上摔倒、受伤等问题,随着AI技术的快速发展与不断普及,越来越多的商超、地铁等场景开始加装专用的安全检测预警系统,核心工作原理即使AI模型与摄像头图像视频流的实时计算&#xf…

使用alpine镜像部署go应用时踩的坑

使用alpine镜像部署go应用时踩的坑 关于交叉编译 实际上我在ubuntu的交叉编译出来的exe并不能在alpine上运行,这边采取拉镜像编译复制出来的做法,部署再用干净的alpine 拉取golang:alpine踩坑 在Dockerhub上可以找到: 然而拉取的alpine中…

在普通的项目中创建web的功能

新增web功能: 1.创建一个新项目,不勾选模板:2.添加web功能: 1.创建一个新项目,不勾选模板: 发现普通项目没有webapp文件夹,即没有web的功能。 2.添加web功能: Add framework support:添加一些…

luceda ipkiss教程 45:在版图上加LOGO

**在设计版图时往往需要加上公司或者学校的LOGO,只需要LOGO的图片,通过代码就可以将LOGO加到版图上,比如: ** 通过代码可以得到版图上的LOGO: ! 代码如下: from si_fab import all as pdk from ipkiss3 import all as i3i3.TECH…

国际验证码有哪些具体的应用场景?

用户注册 在许多网站和应用程序中,用户注册是必要的第一步。通过使用验证码接口,可以防止恶意机器人或自动化程序大规模注册账号,从而保护网站或应用程序的安全性和可靠性。 密码重置 当用户忘记密码或需要重置密码时,验证码可…

MyBatis逆向工程

正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类Mapper接口Mapper映射文件 1…

docker的基本管理和概念

docker是什么? docker是开源的应用容器引擎。基于go语言开发的。运行在Linux系统中的开源的轻量级的“虚拟机”。 docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器 docker的宿主机是linux系统。集装箱可以理解为相互…

CAN总线协议编程实例

1. can.h #ifndef __CAN_H #define __CAN_H#include "./SYSTEM/sys/sys.h"/******************************************************************************************/ /* CAN 引脚 定义 */#define CAN_RX_GPIO_PORT GPIOA #define CAN_RX_GPI…

R2RNet: Low-light Image Enhancement viaReal-low to Real-normal Network

本研究针对在弱光条件下拍摄的图像可能严重降低图像质量的问题进行了探索。解决一系列低光图像的退化可以有效提高图像的视觉质量和高级视觉任务的性能。在本研究中,我们提出了一种新颖的基于Retinex的真实低光到真实正常光网络(R2RNet)&…

Vue自定义指令插槽作用域插槽具名插槽

Vue自定义指令&插槽&作用域插槽&具名插槽 一、学习目标 1.自定义指令 基本语法(全局、局部注册)指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 3.综合案例:商品列表 MyTag组件封装MyTable组件封装 4.路…

小红书笔记投流全攻略,打造爆款内容

在小红书平台上,信息流投放和搜索广告是两种主要的广告形式。信息流投放主要通过用户刷作品时展示你的笔记,而搜索广告则是用户搜索相关关键词时展示出的内容。今天就和大家分享下小红书笔记投流全攻略,打造爆款内容! 一、什么样你…

探秘ipa文件签名工具在线签名工具:工作原理和代码表示原理

随着iOS应用程序的兴起,ipa文件的安全性变得越来越重要。为了确保应用程序来源的可信度和完整性,开发者需要对其应用进行签名,并使用正确的证书来验证其身份。在这篇文章中,我们将探索一个名为在线签名工具的ipa文件签名工具&…

【JavaWeb笔记】单选框,结合Servlet

各个部分的作用 jsp部分 form action"...":表单标签,供用户提交数据。内部的submit点击之后相当于是点action的URL input type"radio":输入类型为单选框。把name设置为一样的,这样效果上就是单选&#xff…

SiC SBD/超结MOS在工业电源上的应用-REASUNOS瑞森半导体

一、前言 工业电源是指用于工业及相关领域中的电子设备与设施的电源系统,其重要性体现在为各类工业设备提供稳定的电力保障,维护设备正常运行,故需具有稳定可靠、高效节能、安全耐用等特点。 常见的工业电源类型包括:交流电源、…

数据库 02-03 补充的SQL的集合运算,字符串计算,更名计算

集合运算: 01.union,并运算 union运算自动去重,是包括两个集合的全部部分。 如果不要去重,union all 02.交运算,intersect intersect运算是去重,只保留两个集合的相同部分。 intersect all 保留重复…

《opencv实用探索·十六》opencv直方图计算calcHist函数解析

直方图理解: (对于8位灰度图像亮度/灰度为(0-255),12位灰度图像亮度/灰度为(0-4095)) 以8位图像为例,亮度分为0到255共256个数值,数值越大,代表的亮度越高。其中0代表纯黑色的最暗区域&#xff…

【Docker二】docker网络模式、网络通信、数据管理、资源控制

目录 一、docker网络模式: 1、概述 2、docker网络实现原理: 3、docker的网络模式: 3.1、bridge模式: 3.2、host模式: 3.3、container模式: 3.4、none模式: 3.5、自定义网络模式&#x…

青光眼术后险致盲,辗转多院幸于成都爱尔眼科重获光明

“我在一家医院诊断为青光眼,然后就做了青光眼手术。结果没有成功,后面产生了脉络膜脱离,从4月到10月底一直没有恢复,我去找医生结果那家医院的医生让我等……等着恢复……”张先生是一位青光眼术后患者,一场手术给他带…

TailwindCSS 配置可视化检查器

问题 TailwindCSS 框架为我们提供了大量默认的类和属性,而且开发者也能够自定义类和配置。 对于初学者来说,这些配置其实是比较复杂的,这也是tailwindcss最大的入手成本,开发者的记忆负担和心智负担也都比较大。 有没有办法能够…

谷歌Gemini被骂了?让子弹飞一会儿;如何构建高效RAG系统;Pika是腐朽王朝的颠覆者;AGI将重塑组织架构;对话月之暗面杨植麟 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 👀 淘宝 X D.Design 堆友 | 淘宝年终好价节 AIGC 创作大赛 https://d.design/competition/taobao-promotion 淘宝携手堆友联合打造了「淘…