MQTT保留消息与遗嘱消息理解和应用

保留消息
每个主题只能存储一条保留消息

Retain As Published

Retain As Published = 0
转发时清除Retain标识Retain As Published = 1
转发时保留原始Retain标识

Retain Handling

Retain handling = 0
订阅建立时发送保留消息Retain handling = 1
订阅建立时,若该订阅当前不存在则发送保留消息Retain Handling = 2
订阅建立时不发送保留消息

遗嘱消息

1. 服务端检测到了一个1/O 故障或者网络故障2. 客户端在 Keep Alive 的时间内未能通讯3. 客户端在没有发送 Beason Code 为0的DISCONNECT 报文的情况下关闭了网络连接4. 服务端在没有收到 DISCONNECT 报文的情况下主动关闭了网络连接
实战场景

保留消息

1如何发布保留消息
发布消息时设置Retain 标识为1。2.保留消息可以被之后订阅的客户端接收
发布保留消息后再进行订阅。收到消息中的 Retain 标识为 13.保留消息会被转发给当前的订阅者
保持订阅,再次发布保留消息。收到消息中的 Retain 标识为04.一个主题下只能存在一条保留消息
向同一主题发布多条保留消息,订阅后只会收到最后一条保留消息5.可以通过通配符订阅获取多条保留消息
向多个主题发送保留消息,使用通配符订阅后会收到多条保留消息6.使用保留消息可能会导致收到重复的消息1.订阅 -> 发布保留消息 -> 重连、再次订阅2.发布保留消息 -> 订阅-> 重连、再次订阅7.如何清除保留消息
发送 Payload 为空的保留消息,注意当前的订阅者会收到这条消息8.为保留消息设置过期时间
发布消息时设置Message Expiry lnterval 属性9.Retain As Published 选项的作用
RAP 设置为0,转发时会清除 Retain 标识。
RAP 设置为1,转发时会保留 Retain 标识,不管是保留消息还是普通消息10.Retain Handling 选项的作用
RH 设置为 0,只要订阅,就会发送保留消息
RH 设置为 1,订阅建立时,如果该订阅当前不存在,才会发送保留消息。
RH 设置为 2,订阅不会发送保留消息。
MQTTX在重新订阅之前都会先取消订阅,所以这里我们用 paho.mgttpython 来模拟。

遗嘱消息

1.如何设置遗嘱消息
在连接时设置。2.遗嘱消息的触发
在EMQX中将ACL检查未通过时的动作改为断开连接,然后订阅 $SYS/#3.遗嘱延迟间隔
在连接时设置 Will Delay Interval 属性4.将遗嘱消息设置为保留消息
在连接时设置 Will Retain 字段

遗嘱消息和保留消息的配合

首先让客户端A在连接时将遗嘱主题设置为 client/a/status,遗嘱消息内容设置为moffline,并且将 Retain 标识设置为1。然后只要客户端A成功连接,就向 client/a/status 主题发布一个内容为 Im online的保留消息。这使得那些订阅了 client/a/status 这个主题的客户端,不管什么时候在线,都能够及时地获取到客户端A的最新状态

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

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

相关文章

FL Studio中如何录音的技巧,让你的声音更加出众哦!

​ Hey小伙伴们!今天我要和大家分享一下在FL Studio中如何录音的技巧,让你的声音更加出众哦! 编曲软件FL Studio 即“Fruity Loops Studio ”,也就是众所熟知的水果软件, 全能音乐制作环境或数字音频工作站&#xff0…

nodejs+vue+ElementUi酒店餐饮客房点餐管理系统

系统非功能需求,只能是为了满足客户需求之外的非功能性要求。系统需要具有数据完整性验证的功能,对界面上非法的数据和不完整的数据进行提示,不能直接保存到数据库中,造成不完整性因素。运行软件:vscode 前端nodejsvueElementUi 语…

【Linux知识点汇总】03 Linux软件包管理器YUM常用命令

YUM(Yellowdog Updater, Modified)是一种在Linux系统上用于管理软件包的工具,特别是在基于Red Hat的发行版中(如Fedora和CentOS)常用 查看和显示命令 命令说明yum list显示所有程序包yum list installed查看当前系统已…

win11 install oh-my-posh

安装配置 下载 Nerd Fonts 字体 oh-my-posh font installNerd Fonts 网站下载,解压后右击安装 为终端设置 Nerd Fonts 字体 修改 Windows 终端设置(默认快捷方式:CTRL SHIFT ,),在settings.json文件defaults属性下添…

【Vue】安装 vue-router 库报错 npm ERR! ERESOLVE unable to resolve dependency tree

问题描述 运行npm install vue-router,安装vue-router库,npm报错。 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: my-project0.1.0 npm ERR! Found: vue2.7.15 npm ERR! node_mod…

typescript中的策略模式

typescript中的策略模式 当我们需要以整洁、易于维护和易于调试的方式构建应用程序时,使用设计模式是一种非常好的方式。 在本文中,我们的目标是阐明如何将策略模式无缝地集成到我们的应用程序中。如果我们熟悉依赖性注入,可能会发现策略模…

数字化车间|用可视化技术提升车间工作效率

数字化车间正在成为现代制造业的重要组成部分。随着科技的不断进步,传统的车间生产方式逐渐地被数字化和自动化取代。数字化车间将机器和软件进行整合,实现了生产过程的高效、精确和可追溯。在数字化车间中,机器之间可以进行无缝的通信和协作…

采用Python 将PDF文件按照页码进行切分并保存

工作中经常会遇到 需要将一个大的PDF文件 进行切分,比如仅需要大PDF文件的某几页 或者连续几页,一开始都是用会员版本的WPS,但是对于程序员,就是要采用技术白嫖 这里就介绍一个 python的PDF 包 PyPDF2 其安装方式也很简单 p…

Linux 中用户与权限

1.添加用户 useradd 1)创建用户 useradd 用户名 2)设置用户密码 passwd 用户名 设置密码是便于连接用户时使用到,如我使用物理机链接该用户 ssh 用户名 ip 用户需要更改密码的话,使用 passwd 指令即可 3)查看用户信息 id 用…

Landsat 5 C02数据集2007-2011年

Landsat 5是美国陆地卫星系列(Landsat)的第五颗卫星,于1984年3月1日发射,2011年11月停止工作。16天可覆盖全球范围一次。Landsat5_C2_TOA数据集是由Collection2 level1数据通过MTL文件计算得到的TOA反射率产品。数据集的空间分辨率…

STM32开发基础知识之位操作、宏定义、ifdef条件编译、extern变量申明、typedef类型别名、结构体

一、引言 本文将对STM32入门开发的基本C语言基础知识进行回顾和总结,一边学者在开发过程中能较顺利地进行。主要包括位操作、define宏定义、ifdef条件编译、extern变量申明、typedef类型别名、结构体等基本知识。 二、基础C语言开发知识总结 (一&…

无频闪护眼灯哪个好?顶级无蓝光频闪护眼台灯推荐

国家卫生健康委员会疾控局宋士勋表示,根据近期发布的2021年监测数据来看,截至2020年,我国儿童青少年总体的近视率是52.7%,从不同年龄段来看,幼儿园6岁孩子的近视率达到14.3%,小学达到35.6%,初中…

『亚马逊云科技产品测评』活动征文|基于亚马逊EC2云服务器配置Nginx静态网页

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 亚马逊EC2云服务器(Elastic Compute Cloud)是亚马…

【Linux】Linux基础

文章目录 学习目标操作系统不同应用领域的主流操作系统虚拟机 Linux系统的发展史Linux内核版和发行版 Linux系统下的文件和目录结构单用户操作系统vs多用户操作系统Windows和Linux文件系统区别 Linux终端命令格式终端命令格式查阅命令帮助信息 常用命令显示文件和目录切换工作目…

Spatial Data Analysis(三):点模式分析

Spatial Data Analysis(三):点模式分析 ---- 1853年伦敦霍乱爆发 在此示例中,我将演示如何使用 John Snow 博士的经典霍乱地图在 Python 中执行 KDE 分析和距离函数。 感谢 Robin Wilson 将所有数据数字化并将其转换为友好的 G…

数字串最大乘积切分(动态规划)

不得不说&#xff0c;动态规划是真的骚 题解已经在图片里面了 代码如下&#xff1a; #include<stdio.h> long long gethnum(long long n);int main(void) {//定义变量并输入int N, M;long long dp[19][7] {0}, num[20][20] {0};scanf("%d%d", &N, &am…

Ext JS 之拖拽Grid(Drag and Drop Grid)

Ext JS 如何实现Grid的拖拽 Ext JS 提供了一个Grid的插件类 Ext.grid.plugin.DragDrop 实现Grid 的拖放功能, 该类的别名是 plugin.gridviewdragdrop。 该插件会将特定的Ext.dd.DragZone和Ext.dd.DropZone实例附加到了Grid的View 上,DropZone是放置的区块,接收来自具有相同…

Linux(统信UOS) 发布.Net Core,并开启Https,绑定证书

实际开发中&#xff0c;有时会需要为小程序或者需要使用https的应用提供API接口服务&#xff0c;这就需要为.Net Core 配置https&#xff0c;配置起来很简单&#xff0c;只需要在配置文件appsettings.json中添加下面的内容即可 "Kestrel": {"Endpoints": …

anaconda3的激活和Cvcode配置C++:报错:CondaIOError: Missing write permissions in:

报错&#xff1a;CondaIOError: Missing write permissions in: 原因&#xff1a;anaconda所在文件夹只有root 才有权限 查看用户名 whoamisudo chown -R 用户名 /home/anaconda3激活anaconda3 #激活 source activate #退出 source deactivate 配置Cvcode配置C 首先看g的…

代码随想Day28 | 93.复原IP地址、78.子集、90.子集II

93.复原IP地址 这道题首先要解决的一个问题是&#xff0c;判断某个字符串是合格的ip地址&#xff1a; 主要考虑到如下三点&#xff1a; 以0为开头的数字不合法里有非正整数字符不合法如果大于255了不合法 接下来&#xff0c;递归三部走&#xff1a; 参数&#xff1a;除了控制…