MQTT遗嘱信息(1)

news2024/11/17 23:31:43

本文内容参考:

什么是MQTT遗嘱消息?如何配置和处理遗嘱消息?_mqtt last will-CSDN博客

【MQTT基础篇(十五)】MQTT遗嘱_last-will qos-CSDN博客

MQTT 协议学习:Retained(保留消息) 与 LWT(最后遗嘱)

特此致谢!

MQTT在笔者的相关文章中以及介绍过了,这里只再简单说一下。MQTT的英文全称为Message Queuing Telemetry Transport,中文译为消息队列遥测传输。MQTT是一种轻量级的消息传输协议,被广泛应用于物联网和传感器网络中。

简要介绍完了MQTT,来看今天的主角 —— MQTT遗嘱信息。

1. 遗嘱消息的概念

遗嘱消息的英文全称为Last Will and Testament,简称LWT。在MQTT中,遗嘱消息是一种特殊类型的消息,用于在客户端异常断开连接时向其他订阅者通知其离线状态或执行一些预定义操作。

遗嘱消息是在客户端连接到MQTT代理服务器(MQTT Broker)时,客户端通过设置遗嘱消息选项来指定的一条消息,说得更明白一些,就是我们在连接到Broker时提到的遗嘱,包括遗嘱主题、遗嘱QoS、遗嘱消息等。当客户端异常断开连接时(例如网络故障或客户端崩溃),MQTT代理会自动将该遗嘱消息发布给其他订阅者。遗嘱消息的目的是提供一种机制,使得其他订阅者能够得知客户端的离线状态,或者执行一些预定义的操作。

遗嘱消息由以下几个关键属性组成:

  • 主题(Topic)

遗嘱消息需要指定一个主题,用于标识遗嘱消息的内容。

  • 负载(Payload)

遗嘱消息可以包含任意的负载数据,用于传递有关客户端的状态或其它信息。

  • QoS(Quality of Service)

遗嘱消息的发布可以选择不同的QoS级别,以确保可靠的消息传递。

  • 保留(Retained)

遗嘱消息可以选择保留,这意味着新的订阅者在订阅该主题时将收到最近的遗嘱消息。

遗嘱消息的配置是可选的,每个客户端可以根据自己的需求选择是否设置遗嘱消息。当客户端连接到MQTT代理时,可以通过设置遗嘱消息选项来指定遗嘱消息的内容和属性。

2. Retain的详细介绍

关于保留(Retained)一项,详细说明一下。假设有这样一个场景:

有一个温度传感器,它每三个小时向一个 Topic 发布当前的温度。那么问题来了,有一个新的订阅者在它刚刚发布了当前温度之后订阅了这个主题,那么这个新的订阅端必须等到三个小时以后,才能收到温度传感器再次发布消息的时候。在这之前,这个新的订阅者对传感器的温度数据一无所知。

那么怎么解决这个问题?这个时候就轮到Retained消息出场了。Retained消息是指在PUBLISH数据包中Retain标识设为1的消息,Broker收到这样的PUBLISH包以后,将保存这个消息,当有一个新的订阅者订阅相应主题的时候,Broker会马上将这个消息发送给订阅者。

Retain消息有以下一些特点:

  • 一个Topic只能有1条Retained消息,发布新的Retained消息将覆盖老的Retained消息;

  • 如果订阅者使用通配符订阅主题,它会收到所有匹配的主题上的Retained消息;

  • 只有新的订阅者才会收到Retained消息。如果订阅者重复订阅一个主题,也会被当做新的订阅者,然后收到 Retained 消息;

  • Retained消息发送到订阅者时,消息的Retain标识仍然是1,订阅者可以判断这个消息是否是 Retained消息,以做相应的处理

如果想要删除一个Retained消息也很简单,只需要向这个主题发布一个Payload长度为0的 Retained消息就可以了。

这样,这一场景的解决方案就很简单了,温度传感器每 3 个小时发布当前的温度的Retained消息,那么无论新的订阅者什么时候进行订阅,它都能收到温度传感器上一次发布的数据。

3. 遗嘱消息的用途

遗嘱消息在MQTT中具有多种用途,以下是其中一些常见的应用场景:

(1)状态通知

客户端可以设置一个遗嘱消息来通知其他订阅者其在线或离线状态。当客户端正常断开连接时,代理会发布遗嘱消息,告知其他订阅者该客户端已经离线。

(2)资源释放

某些场景下,客户端连接异常断开时可能需要释放所占用的资源或执行清理操作。通过设置遗嘱消息,客户端可以指示代理在其断开连接时执行相应的资源释放或清理操作。

(3)信息传递

遗嘱消息可以携带有关客户端的信息,例如设备的状态、位置或其他重要数据。当客户端断开连接时,这些信息可以被传递给其他订阅者,以便及时了解客户端的状态或其他相关信息。

更多MQTT遗嘱消息机制的介绍和讲解,请看下回。

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

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

相关文章

【Python实战】零基础实战教程(一) Hello World!

【Python实战】零基础Python实战教程 一、前言二、官方 Python3.12 版本安装教程1、下载2、安装3、测试 三、安装 Python 编译器1、下载2、安装3、启动 四、Hello World!1、创建项目2、创建 hellow_world.py 文件3、在控制台打印 Hellow World! 一、前言 由于公司新…

期货的杠杆怎么计算?

什么是杠杆系数 杠杆系数是指期货合约价值与保证金之间的比例。它表示投资者只需投入少量资金,就可以控制价值更高的期货合约。杠杆系数越高,投资者的资金放大倍数就越大,但风险也越大。 什么是期货保证金呢? 期货保证金&…

微前端框架是为了解决项目应用在大型项目中带来的复杂性和维护难题而提出的技术方案。

微前端框架是为了解决单页应用(SPA)在大型项目中带来的复杂性和维护难题而提出的技术方案。Qiankun.js、MicroApp 和 Wujie 是三种流行的微前端框架。以下是对这三种框架的优缺点分析: Qiankun.js 优点 成熟度高:Qiankun.js 基…

麦克风什么牌子的音质效果好?揭秘领夹麦克风哪个牌子音质好

近年来,随着网络直播、短视频、网课等新兴行业的兴起,大家对麦克风的需求量不断增加。而领夹麦克风作为一种轻便、便携的录音设备,也是得到了广大用户的青睐。一款优质的领夹麦克风能够带来更清晰、更真实的声音效果,让我们在在各…

SAP ABAP 常用实用类

文章目录 前言一、输出 展示 数据信息 a.将 JSON 格式化为可读 并以弹框形式输出 b.将内表内容以表格形式输出 c.弹框形式显示 HTML 内容。也能显示包含js 的html。也可以显示pdf 图片 二、输入 获取 数据信息 a.弹框 添加 输入框…

python e怎么表示

exp()方法返回x的指数,ex。 语法 以下是 exp() 方法的语法: import math math.exp( x ) 注意:exp()是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法。 参数 x -- 数值表达式。 返回值 返回x的指数,…

怎样恢复数据?原来只要3个方法,真是救大命了

无论是工作文件,还是个人的照片、视频,手机数据都承载着我们的记忆和努力。但如果不小心删除了,我们该怎样恢复数据呢?其实,恢复数据并不是一件复杂的事情,只要掌握正确的方法,我们就能有效地找…

Amazon Q:对话智能赋能企业发展

在最近举办的亚马逊云科技大会上,引人瞩目的消息是 Amazon Q 的推出,这是一款专注于生成式 AI 支持的新型助手。与其他智能助手相比,Amazon Q 助手聚焦在办公场景,具有针对性,旨在提供更为准确和个性化的服务。 一、Am…

TikTok短视频矩阵系统

随着数字化时代的到来,短视频已成为人们获取信息、娱乐消遣的重要渠道。TikTok,作为全球最受欢迎的短视频平台之一,其背后的短视频矩阵系统是支撑其成功的关键因素。本文将深入探讨TikTok短视频矩阵系统的构成、功能以及它在新媒体时代中的影…

面试-Java线程池

1.利用Excutors创建不同的线程池满足不同场景的需求 分析: 如果并发的请求的数量非常多,但每个线程执行的时间非常短,这样就会频繁的创建和销毁线程。如此一来,会大大降低系统的效率。 可能出现,服务器在为每个线程创建…

【Python实战因果推断】2_因果效应异质性2

目录 CATE with Regression Evaluating CATE Predictions CATE with Regression 我想你可能已经预料到了:与应用因果推理中的大多数情况一样,答案往往从线性回归开始。但在走这条路之前,让我们把事情变得更具体一些。假设你在一家遍布全国的…

python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)

1.pytest数据参数化 假设你需要测试一个登录功能,输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…

NoSQL之Redis配置与管理

目录 一、关系型数据库和非关系型数据库 1.关系型数据库 2.非关系型数据库 3.关系型数据库和非关系型数据库区别 二、Redis 1.Redis简介 2.Redis 的优点 3.Redis 使用场景 4.Redis的数据类型 5.哪些数据适合放入缓存中? 6.Redis为什么这么快?…

Uniapp的使用

为什么要使用uniapp uniapp 可以进行多端开发,uniapp 在设计的时候就拥有许多兼容性代码,可以兼容很多的平台 如 支付宝小程序 html页面 微信小程序等,注重开发效率而不是运行效率时 ,就可以考虑一下 uniapp 当然也可以去…

08 元组和集合

目录 一、元组(tuple) 1. 什么是元组 2. 查操作 3. 函数和方法 二、集合(set) 1. 什么是集合 2. 数学集合运算 一、元组(tuple) 1. 什么是元组 元组是容器型数据类型,将( )作为容器的标…

嵌入式学习——硬件(ARM内核汇编指令)——day52

ARM汇编指令 学习arm汇编的主要目的是为了编写arm启动代码,启动代码启动以后,引导程序到c语言环境下运行。换句话说启动代码的目的是为了在处理器复位以后搭建c语言最基本的需求。因此启动代码的主要任务有: 初始化异常向量表;初…

强大的资源提取工具

一、简介 1、是一款功能强大的文件提取工具,它可以从多种不同类型的存档文件或安装程序中提取文件,包括但不限于ZIP、RAR、7z、ISO等格式。这款软件的独特之处在于它不仅能够处理常规的压缩文件,还能处理各种软件安装程序,甚至是加…

TMGM外汇平台: 纽元未来走势,新西兰即将降息

2024年6月26日,全球金融市场对新西兰联储即将采取的货币政策持续关注。分析师普遍预估新西兰将实施降息政策,这一政策调整预计将对新西兰元(纽元)的国际交易价值产生重大影响。本文将TMGM深入探讨新西兰经济的当前状况&#xff0c…

java:spring-security的简单例子

【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>org.springf…

java使用Graphics2D生成图片

UI图 实际图片数据库中只存了一个二维码转的base64的数组,直接导出只有一个二维码 这里使用 Graphics2D 画图 public static void main(String[] args) {// 假设你有一个Base64编码的字符串&#xff0c;它表示一张图片String base64ImageString "/9j/4AAQSkZJRgABAgAAA…