当前位置: 首页 > news >正文

Android 消息队列之MQTT的使用(二):会话+消息过期机制,设备远程控制,批量控制实现

目录

一、实际应用场景

  1. 室内温湿度数据上传
  2. 设备远程控制
  3. 批量控制实现

二、会话管理、消息过期设置

4.1 会话管理

  1. Clean Session参数
    • 新旧会话模式对比
    • 典型应用场景

4.2 消息过期设置

  1. MQTT 5.0消息过期机制
    • Message Expiry Interval属性
    • QoS级别影响

三、实际应用场景

3.1 室内温湿度数据上传

应该如何设计呢?比如我现在有十台设备,数据都要上传到后台服务器:

  1. 主题:比如你温湿度数据发送到哪个主题,后台服务器这边就会订阅这个主题,
  2. 数据:数据里面需要保护设备的唯一号,这样服务器才知道是哪台设备发上来的。
# 设备端:每隔30秒发布数据
client.publish("envmon/D001/sensor", json.dumps(data), qos=1)# 服务端:订阅所有设备的传感器主题,使用通配符
mosquitto_sub -t "envmon/+/sensor" -v

3.2 后台服务器重启温湿度器

比如有时候,想远程在移动端或web端,关掉温湿度器,那么应该如何设计呢?

  1. 主题:客户端这边订阅指定的主题,一般是以设备唯一号作为主题,后台会往这个主题里面发送消息。这样就能精准的发送到指定的设备上去。
  2. 数据:数据格式,{功能码:开关码}。因为可能会有很多远程功能,所以我们需要设计功能码。
服务端:
client.publish("envmon/D001/control", xxx, qos=2)客户端:
client.subscribe("envmon/D001/control", qos=2)

3.2 如果我想实现批量重启呢?或者批量关闭温湿度器呢?

客户端可以订阅多个主题,通过多次调用 subscribe() 方法实现多主题订阅。

// 订阅温湿度数据主题
subscribe("envmon/D001/sensor", 1);
subscribe("envmon/D002/sensor", 1);// 订阅设备控制主题
subscribe("envmon/D001/control", 2);
subscribe("envmon/D002/control", 2);

这里,我们要实现的批量,可以使用通配符

  1. 客户端
// 订阅所有设备的传感器数据(envmon/任何设备ID/sensor)
subscribe("envmon/+/sensor", 1); 
  1. 服务端:发送所有设备就都能收到。
envmon/D001/sensor

如果说,要分组,或者勾选,也可以订阅单条的来进行发送。

四、会话、消息过期设置

4.1 会话

会话,指的是MQTT客户端与MQTT服务端之间的连接。

会话一般可以设置两个参数

  1. 每次打开是否是一个全新的会话,还是延续上一次的会话。
  2. 会话的状态会维持多久。

参数一:是否延续会话(Clean Session)​

​两种模式对比​
场景Clean Session=true(新会话)Clean Session=false(延续会话)
设备断网后重连丢失所有订阅和未读消息自动恢复订阅列表和离线期间消息
适用设备临时设备(如一次性传感器)重要设备(如智能门锁)
服务器资源消耗高(需存储消息)
典型代码场景setCleanSession(true)setCleanSession(false)

实际案例:​
智能门锁(Clean Session=false):

  1. 门锁断网时,用户通过APP发送开锁指令
  2. 服务器将指令暂存在「会话快递柜」
  3. 门锁网络恢复后,立即收到开锁指令

​参数二:会话有效期(Session Expiry)​

​设置方式​
// 设置会话保留时间为1小时(单位:秒)
options.setSessionExpiryInterval(3600); 
​关键行为规则​
有效期设置服务器行为
0关闭连接立即销毁会话(等同 Clean Session=true)
3600(1小时)设备离线后,会话保留1小时,超时后自动清除
0xFFFFFFFF永久保留会话(慎用!会导致服务器内存泄漏)

也就是,即使Clean Session=false(延续会话),会话有效期设置为60秒,如果离线超过60秒,那么也会清空之前的消息。

4.2 消息过期设置

MQTT 5.0 协议新增了 ​Message Expiry Interval​ 属性,可直接设置消息过期时间。

import org.eclipse.paho.mqttv5.common.MqttMessage;
import org.eclipse.paho.mqttv5.common.packet.MqttProperties;// 创建消息并设置过期时间为60秒
MqttMessage message = new MqttMessage();
message.setPayload("Hello".getBytes());
message.setQos(1);// MQTT 5.0 属性设置
MqttProperties properties = new MqttProperties();
properties.setMessageExpiryInterval(60L); // 单位:秒
message.setProperties(properties);// 发布消息
client.publish("topic/commands", message);
2. 服务器行为(需支持MQTT5.0)
  • 消息在服务器存储超过设定时间后自动删除
  • 过期消息不会转发给订阅者
  • QoS 2 消息在过期前会完成确认流程

相关文章:

Android 消息队列之MQTT的使用(二):会话+消息过期机制,设备远程控制,批量控制实现

目录 一、实际应用场景 室内温湿度数据上传设备远程控制批量控制实现 二、会话管理、消息过期设置 4.1 会话管理 Clean Session参数 新旧会话模式对比典型应用场景 4.2 消息过期设置 MQTT 5.0消息过期机制 Message Expiry Interval属性QoS级别影响 三、实际应用场景 …...

一、JVM基础概念

一、JVM的设计目标 一次编译,到处运行(跨平台) ➔ Java编译成字节码,由JVM在不同平台解释/编译执行,实现跨平台。 内存管理与垃圾回收 ➔ JVM统一负责内存分配和回收,降低内存泄漏的风险。 性能优化 ➔ JIT(即时编译…...

深度学习---Pytorch概览

一、PyTorch 是什么? 1. 定义与定位 开源深度学习框架:由 Facebook(Meta)AI 实验室开发,基于 Lua 语言的 Torch 框架重构,2017 年正式开源,主打动态计算图和易用性。核心优势:灵活…...

第33周JavaSpringCloud微服务 分布式综合应用

第33周JavaSpringCloud微服务 分布式综合应用 一、分布式综合应用概述 分布式知识体系内容广泛,主要包括分布式事务、分布式锁、RabbitMQ等消息中间件的应用以及跨域问题的解决。 1.1 课程重点内容介绍 分布式事务 :在大型项目中普遍存在,…...

Paramiko 完全指南

目录 Paramiko 概述核心功能与模块框架安装与依赖基础用法与案例详解 SSH 连接与命令执行密钥认证SFTP 文件传输交互式会话端口转发 高级功能与实战技巧常见问题与解决方案总结与资源推荐 1. Paramiko 概述 是什么? Paramiko 是一个纯 Python 实现的 SSHv2 协议库…...

夜莺监控V8(Nightingale)二进制部署教程(保姆级)

夜莺监控部署 前置工作 1. 部署好mysql 2. 部署好redis 3. 部署好prometheus夜莺压缩包下载 本教程基于Centos7系统下的二进制方式部署,先去官网进行压缩包下载 在系统创建/opt/n9etest目录,并将压缩包拖进目录 mkdir /opt/n9etest进入/opt/n9etest&#xff0…...

鸿蒙应用开发 知识点 官网快速定位表

ArkTS 语言介绍 ArkTS 语言介绍 基础入门 资源分类与访问 添加组件(基础组件) 显示图片 (Image) 按钮 (Button) 单选框 (Radio) 切换按钮 (Toggle) 进度条 (Progress) 视频播放 (Video) 使用文本 文本显示 (Text/Span) 文本输入 (TextInput/TextArea) 使用弹窗 使用弹…...

【神经网络与深度学习】两种加载 pickle 文件方式(joblib、pickle)的差异

引言 从深度学习应用到数据分析的多元化需求出发,Python 提供了丰富的工具和模块,其中 pickle 和 joblib 两种方式在加载数据文件方面表现尤为突出。不同场景对性能、兼容性以及后续处理的要求不尽相同,使得这两种方式各显优势。本文将通过深…...

quickbi finebi 测评(案例讲解)

quickbi & finebi 测评 国产BI中入门门槛比较低的有两个,分别是quickbi和finebi。根据我的经验通过这篇文章做一个关于这两款BI的测评文章。 quickbi分为个人版、高级版、专业版、私有化部署四种。这篇文章以quickbi高级版为例,对quickbi进行分享。…...

vue的生命周期 以及钩子

最早可以在created 时调用后端接口获取数据,因为beforecreated的时候 那个data 都还还是初始化出来 修改数据的时候触发 update 案例1:create 案例2:一进来页面获取搜索框焦点 echarts 饼图渲染 初始化dom后才去准备实例,所以必须要在dom之后…...

Mariadb 防火墙服务器和端口:mysql | 3306

Centos7 Mariadb 理解:Mariadb数据库就类似于我们生活中常见的Excel。 主要工作原理就是我们创造一个数据库其中创造一个数据表再在数据表中输入内容,分为三类。在详细点就是打开Excel(数据库),我们在其中加入…...

爬虫学习笔记(二)--web请求过程

Web请求全过程(重要) 从输入完网址(如输入百度网址)到返回页面以及页面中的数据这一完整的过程发生了什么事情? 服务器端渲染 在服务器端直接把数据和html整合,统一返回给浏览器,在页面源代码…...

开发vue项目所需要安装的依赖包

在开发Vue项目时,通常需要安装以下几个核心依赖包:1、Vue CLI、2、Vue Router、3、Vuex、4、Axios。这些依赖包可以确保你的Vue项目拥有基础的功能和良好的开发体验。接下来,我们将详细介绍每个依赖包的作用、安装方法以及使用案例。 一、VUE…...

Java SE(4)——方法详解

1.方法的概念&使用 1.1 什么是方法? Java中的方法类似于C语言中的函数,是用于执行特定任务的代码块。 那么用方法组织起来的代码块和普通的代码相比有什么优势呢? 1.当代码规模较大且应用场景较为复杂时,方法能够模块化地组…...

网络安全实战指南:从安全巡检到权限维持的应急响应与木马查杀全(命令查收表)

目录 一、安全巡检的具体内容 1. 巡检的频率与目标是什么 2. 巡检的内容是什么以及巡检后如何加固 二、Windows环境下应急响应的主要流程 1. 流程概述及每个步骤详细解释 步骤1:隔离与遏制 步骤2:识别与分析 步骤3:清除与恢复 步骤4…...

Infrared Finance:Berachain 生态的流动性支柱

在加密市场中,用户除了参与一级和二级交易,还有一种低门槛参与的就是空投。从 2021 年 DeFi 成为主流开始,空投一直都是“以小搏大”的机会,通过参与项目早期的链上交互和任务以获取空投奖励,近几年已成为一种广受欢迎…...

Hadoop和Spark大数据挖掘与实战

1.概述 本节将系统讲解大数据分析的完整流程,包括数据采集、预处理、存储管理、分析挖掘与结果可视化等核心环节。与此同时,我们还将对主流数据分析工具进行横向对比,帮助读者根据实际需求选用最合适的工具,提升数据价值挖掘的效…...

TCP vs UDP:核心区别、握手过程与应用场景(附对比图)

🌐 引言 在网络通信中,TCP(传输控制协议)和UDP(用户数据报协议)是两大核心传输层协议。它们各有优劣,适用于不同场景。本文将用图文对比实战示例,帮你彻底理解两者的区别&#xff0…...

人工智能-深度学习之多层感知器

深度学习 任务任务1任务2任务3 机器学习的弊端多层感知器 (MLP/人工神经网络)MLP实现非线性分类Keras介绍与实战准备Keras or TensorflowKeras建立MLP模型 实战(1): 建立MLP实现非线性二分类实战(2): MLP实…...

Improving Deep Learning For Airbnb Search

解决问题 问题1: 解决推荐酒店与用户实际预定酒店价格存在偏差问题,实际预定比推荐要更便宜: 所以问题为是否更低价格的list更倾向于用户偏好,应该被优先推荐? 1. 该文通过数据分析与模型演进,将模型改造为item sco…...

多模态大型模型,实现以人为中心的精细视频理解

大家看完觉得有帮助记得点赞和关注!!! 抽象 精细理解视频中人类的动作和姿势对于以人为中心的 AI 应用程序至关重要。在这项工作中,我们介绍了 ActionArt,这是一个细粒度的视频字幕数据集,旨在推进以人为中…...

向量数据库Milvus的部署与使用

Milvus介绍 Milvus是一个开源、高性能、高扩展性的向量数据库,Milvus可以用来存储文本、图像、音频等非结构化数据,本质上是用Embeddings将非结构化数据转换成能够捕捉其基本特征的数字向量,然后将这些向量存储在向量数据库中,从…...

1.文档搜索软件Everything 的使用介绍

Everything 是 Windows 文件搜索的效率天花板,通过灵活语法和极速响应,彻底告别「找文件焦虑」。 定位:一款专注于 极速文件名搜索 的 Windows 工具,免费且轻量(安装包仅几 MB)。 核心优势…...

2025系统架构师---论企业集成平台的技术与应用

摘要 本文探讨了企业集成平台的技术与应用,以某商业银行开发的绩效考核平台系统为例,分析了企业集成平台的基本功能及关键技术,并详细阐述了在表示集成、数据集成、控制集成和业务流程集成方面的应用和实施方式。通过异构系统之间的集成,绩效考核平台与其他系统实现了有机…...

STM32Cubemx-H7-16-FreeRTOS-1-创建工程,实现两个灯的基本亮灭

前言 裸机也是开发到一半快要结束了,接下来开始上操作系统,然后先能使用基本的,后面再讲理论。 Cubemx创建工程 基本打开生成就不说了,直接从界面开始 从这里开始吧 1.首先开启外部高速晶振 2.先这样选择 选择HSE时钟环&#xff…...

深入浅出限流算法(二):更平滑的滑动窗口

好的,接续上一篇关于固定窗口计数器的讨论,我们现在来看看它的改进版——滑动窗口算法,它旨在解决固定窗口那个恼人的“临界突变”问题。 在上一篇文章中,我们探讨了最简单的固定窗口计数器限流算法,并指出了它最大的缺…...

纷析云开源财务软件:基于Spring Boot的轻量化财务中台实践

一、技术架构与核心设计 全栈开源技术栈 后端框架:基于Spring Boot 3.x构建,集成MyBatis-Plus作为ORM层,支持JDK 17特性(如虚拟线程并发处理),确保高吞吐与稳定性。 前端框架:采用Vue 3 TypeS…...

软考-软件设计师中级备考 5、数据结构 树和二叉树

1、树的基本概念 节点的度:节点拥有的子树数目。例如,若一个节点有 3 棵子树,其度为 3。树的度:树中节点的最大度数。如树中所有节点的度最大为 4,则树的度是 4。叶子节点:度为 0 的节点,也…...

php 需要学会哪些技术栈,掌握哪些框架

作为一个「野生」程序员,我的学习过程比较急功近利。 我记得自己写的第一个 PHP 程序是留言本。一上来对 PHP 一窍不通,所以直接去网上找了个留言本的源码,下载下来后先想办法让它在自己电脑上运行起来。通过这个过程掌握了 PHP 开发环境的搭…...

短视频矩阵系统贴牌批量剪辑功能开发,支持OEM

一、引言 在短视频行业蓬勃发展的当下,短视频矩阵运营已成为企业和个人实现品牌推广、流量增长的重要策略。然而,面对大量的视频素材和多个运营账号,传统的单个视频剪辑、发布方式效率极低,难以满足矩阵运营的需求。为了提高内容…...

【Java EE初阶】多线程(二)

1.在图中代码,我们调用了start方法,真正让系统调用api创建了一个新线程,而在这个线程跑起来之后,就会自动执行到run。调用start方法动作本身速度非常快,一旦执行,代码就会立即往下走,不会产生任…...

分布式链路追踪理论

基本概念 分布式调用链标准-openTracing Span-节点组成跟踪树结构 有一些特定的变量,SpanName SpanId traceId spanParentId Trace(追踪):代表一个完整的请求流程(如用户下单),由多个Span组成…...

conda和bash主环境的清理

好的!要管理和清理 Conda(或 Bash)安装的包,可以按照以下步骤进行,避免冗余依赖,节省磁盘空间。 📌 1. 查看已安装的包 先列出当前环境的所有安装包,找出哪些可能需要清理&#xff…...

Linux系统管理与编程14:Shell变量及定制bash登录界面

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 1.准备工作 创建用户wu useradd wu passwd wu 修改权限 chmod uw /etc/sudoers 编辑 visudo 在root行下,添加:“wu ALL……” 图14- 1 恢复文件权限并…...

微信小程序开发笔记

一、首先,下载一个微信开发者工具。前端项目就正常创建,由于本人的前端一塌糊涂,就让AI给我生成了一个我想要的前端项目(包括后面写功能)。 这里开发的时候会用到这个,但是一定注意服务部署到服务器上再本…...

SEO长尾关键词优化核心策略

内容概要 在搜索引擎优化领域,长尾关键词因其精准的流量捕获能力与较低的竞争强度,已成为提升网站自然流量的核心突破口。本文围绕长尾关键词优化的全链路逻辑,系统拆解从需求洞察到落地执行的五大策略模块,涵盖用户搜索意图解析…...

第一节:Linux系统简介

理论知识 Linux的起源与发展:1991 年,芬兰赫尔辛基大学的学生林纳斯托瓦兹受到 Minix 和 Unix 思想的启发,开始编写 Linux 内核。最初,它只是一个个人项目,但随着开源社区的加入,Linux 迅速发展壮大。如今…...

微信聊天机器人搭建 教程/开发

创建标签 简要描述: 添加标签 请求URL: http://域名地址/addContactLabel 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必…...

Ubuntu中C++项目安装二次规划库——qpOASES 库

一、在Ubuntu安装qpOASES 库 步骤 1:更新系统包列表 首先,打开终端,执行以下命令更新系统的包列表,以确保你能获取到最新的软件包信息。 sudo apt update 步骤 2:安装必要的依赖 qpOASES库的编译和安装需要一些基…...

JavaScript-基础语法

前言: 一个网页由三个部分组成: 1.html:超文本标记语言,用于控制网页的结构(页面元素和内容) 2.css:级联样式表,用于控制网页布局,涉及对网页文字,背景,布局进…...

已有 npm 项目,如何下载依赖、编译并运行项目

诸神缄默不语-个人技术博文与视频目录 这篇博文的适用场景是比如说反正你现在有了一个现成的npm项目,然后无论如何,你要把前端挂起来。 文章目录 一、准备工作1. 安装 Node.js 和 npm2. 克隆或获取项目代码 二、安装项目依赖三、了解 npm 脚本命令四、构…...

第四章:Messaging and Memory

Chapter 4: Messaging and Memory 从配置管理到消息记忆:如何让AI记住对话内容? 在上一章的配置管理中,我们已经能让系统记住所有参数设置。但你是否想过:如果用户连续提问“今天天气如何?”和“明天呢?”…...

iPhone闹钟无法识别调休致用户迟到,苹果客服称会记录反馈

iPhone闹钟无法识别调休致用户迟到,苹果客服称会记录反馈 基于 6 个来源 因“五一”劳动节调休,4月27日(周日)本应上班,不少iPhone用户却因闹钟未响迟到,“调休”“当苹果闹钟遇到调休”话题登上热搜。苹…...

npm error code CERT_HAS_EXPIRED

npm error code CERT_HAS_EXPIRED 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主理人 擅长.net、C、python开发, 如果遇到技术问题,即可私…...

C++ 之 【list的简介、list 的构造函数、iterator、容量操作、元素访问、增删查改与迭代器失效】

目录 1.list的介绍 2.list的使用 2.1 构造函数 2.2 iterator 的使用 2.3 容量操作 2.4 元素访问 2.5 增删查改 2.5.1头插头删与尾插尾删 2.5.2 insert 、erase 函数 2.5.3 clear、swap函数 2.5.4 关于find函数 3.迭代器失效 1.list的介绍 (1)list的底层通常实现为带…...

使用手机录制rosbag包

文章目录 简介录制工具录制步骤录制设置设置IMU录制频率设置相机分辨率拍照模式录制模式数据制作获取数据数据转为rosbag查看rosbag简介 ROS数据包(rosbag)是ROS系统中用于记录和回放传感器数据的重要工具,通常用于算法调试、系统测试和数据采集。传统上,rosbag依赖于ROS环…...

使用阿里云 CDN 保护网站真实 IP:完整配置指南

使用阿里云 CDN 保护网站真实 IP:完整配置指南 一、宝塔面板准备工作1. 确认网站部署状态2. 宝塔中检查网站配置 二、配置阿里云 CDN1. 添加域名到 CDN2. 配置 DNS 解析3. 配置成功确认 三、宝塔面板安全加固(隐藏 IP 的关键步骤)1. 禁止通过…...

JAVA-StringBuilder使用方法

JAVA-StringBuilder使用方法 常用方法 append(Object obj) 追加内容到末尾 sb.append(" World"); insert(int offset, Object obj) 在指定位置插入内容 sb.insert(5, “Java”); delete(int start, int end) 删除指定范围的字符 sb.delete(0, 5); replace(int start…...

Milvus(9):字符串字段、数字字段

1 字符串字段 在 Milvus 中,VARCHAR 是用于存储字符串数据的数据类型。定义VARCHAR 字段时,有两个参数是必须的: 将datatype 设置为DataType.VARCHAR 。指定max_length ,它定义了VARCHAR 字段可存储的最大字符数。max_length 的有…...

locust压力测试

安装 pip install locust验证是否安装成功 locust -V使用 网上的教程基本上是前几年的,locust已经更新了好几个版本,有点过时了,在此做一个总结 启动 默认是使用浏览器进行设置的 # 使用浏览器 locust -f .\main.py其他参数 Usage: locust […...