实现设备的延时控制

news2025/2/2 23:45:43
1. 引言

当搭建IoT管理后台后,APP、设备、云端三端就可以实现交互;当点击APP中的控制按钮,其控制指令就可以经过云端转发到设备执行,当设备执行后将设备的状态上报到云端,APP通过轮训可以取到设备此时的状态,在控件上展示控制结果。

以上的控制流程属于即时控制,便于理解。在人们使用设备的场景中,存在一种定时/延时的场景,比如这种家里的烟机延时3分钟后再关机,那定时/延时场景是如何实现的呢?有什么较好的方式来实现?

目前有两种方式进行实现:

  • 传统方式
  • 使用消息中间件
2. 实现定时的方法

传统方法

其工作原理是在APP端设置一个未来的时间戳和运行的周期,这些表示未来时间的数据和控制指令会被放入云端数据库存储起来,云端会启动定时任务,比如每隔5s去扫描数据库数据,如果时间满足,就会将设置的控制命令下发到设备,从而实现了设备控制。

以上的方式属于传统基于数据库的定时调度方案,在分布式场景下,性能不高,定时精度不高,实现复杂。因此,接下来提出基于RocketMQ的定时消息实现定时调度任务。

RocketMQ定时任务

首先展示一下,RocketMQ实现延时消息的流程图:

RocketMQ延时消息流程图

如图所示,用户在APP设置的控制指令和定时时间会发送到RocketMQ队列中存储起来,当时间到指定时间后,作为消费者的推送平台才能把控制指令推送给设备。这种基于成熟的消息中间件的方式有着以下的优势:

  • 精度高、开发门槛低
  • 高性能可扩展:传统的数据库扫描方式较为复杂,需要频繁调用接口扫描,容易产生性能瓶颈。 Apache RocketMQ 的定时消息具有高并发和水平扩展的能力。

接下来以代码的方式介绍一下如何实现消息延时

要在SpringBoot中使用RocketMQ进行延时消息发送,需要使用RocketMQ的定时消息功能,一共4步。

  1. 在pom.xml添加依赖:
<dependency>    
    <groupId>org.apache.rocketmq</groupId>    
    <artifactId>rocketmq-client</artifactId>    
    <version>${rocketmq-client.version}</version>
</dependency>
<dependency>    
    <groupId>org.apache.rocketmq</groupId>    
    <artifactId>rocketmq-spring-boot-starter</artifactId>    
    <version>${rocketmq-spring-boot-starter.version}</version>
</dependency>
  1. 在application.properties文件中添加以下配置:
rocketmq.name-server=your-nameserver-ip:9876
rocketmq.producer.group=your-group-name
  1. 创建一个RocketMQ生产者类:
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;
@Component
public class RocketMQProducer {    
    @Autowired    
    private RocketMQTemplate rocketMQTemplate;    
    
    public void sendDelayMessage(String topic, Object message, long timeout, int delayLevel) {
        // 封装消息
        Message<Object> msg = MessageBuilder.withPayload(message).build();
        // 发送消息
        rocketMQTemplate.syncSend(topic, msg, timeout, delayLevel);    
	}
}

如上在代码中添加了rocketMQTemplate.syncSend(topic, msg, timeout, delayLevel); 这句代码设置了delayLevel。

其延时level表默认配置如下:

private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";

解释:

level有以下三种情况:
level == 0,消息为非延迟消息;
1<=level<=maxLevel,消息延迟特定时间,例如level1,延迟1s;
level > maxLevel,则level
maxLevel,例如level==20,延迟2h。

  1. 在需要发送延时消息的地方调用sendDelayMessage方法:
rocketMQProducer.sendDelayMessage("your-topic-name", "your-message", "timeout", 3);

这句代码设置了delayLevel=3,对应messageDelayLevel中的10s,表示消息需要延时10s才能消费。

3. 小结

综上所述,以上介绍了RocketMQ实现延时消息的实现方法,在实现延时的时候,需要根据业务提前确认好delayLevel,该方式也常用于延时关闭支付订单。给个思考,如果想自定义延时失败,比如33分钟,代码应该如何改呢?

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

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

相关文章

Spring Boot 优雅集成 Spring Security 5.7(安全框架)

Spring Boot 集成 Spring Security &#xff08;安全框架&#xff09; 本章节将介绍 Spring Boot 集成 Spring Security 5.7&#xff08;安全框架&#xff09;。 &#x1f916; Spring Boot 2.x 实践案例&#xff08;代码仓库&#xff09; 介绍 Spring Security 是一个能够为基…

为行业变革注入新动能,行易道入选“高工智能汽车智驾榜单”

6月8日到9日&#xff0c;2023高工智能汽车开发者大会在上海成功举行。与会期间&#xff0c;北京行易道科技有限公司&#xff08;以下简称“行易道”&#xff09;营销副总裁袁泽雁带来了以“车载毫米波雷达进入成像时代”主题演讲&#xff0c;为大家分享了4D毫米波雷达如何以“新…

Java网络开发(Tomcat异步分页+增删改查)——从同步到异步 从jsp 到 js + axios + vue 实现 数据分页显示 数据增删改查

目录 引出一些固定的东西1.固定的响应格式2.name 变成 v-model 进行双向绑定3.下拉框选中--:value"type.id" v-model"companyDb.typeId"4.vue导包固定写法5.script固定写法6.axios的get请求7.axios的post请求---let params new URLSearchParams()8.前端美…

MYSQL 在优化器缺陷在次验证,与MYSQL 熄火了 还是 成熟了??

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

聊聊我做 NeRF-3D重建性能优化经历

我们新推出大淘宝技术年度特刊《长期主义&#xff0c;往往从一些小事开始——工程师成长总结专题》&#xff0c;专题收录多位工程师真诚的心路历程与经验思考&#xff0c;覆盖终端、服务端、数据算法、技术质量等7大技术领域&#xff0c;欢迎一起沟通交流。 本文为此系列第四篇…

飞桨携手第二届GitLink开源夏令营,邀你参与顶尖开源项目!

想参与顶尖开源项目开发&#xff1f; 想熟悉开源社区参与流程&#xff1f; 想获得资深导师指导和丰厚现金奖励&#xff1f; 机会来啦&#xff01; 2016年9月&#xff0c;飞桨框架正式开源&#xff0c;其兼备易用性、高效性、灵活性和可扩展性等特点。如今&#xff0c;百度飞桨在…

软件工程:说透软件5种常见的部署策略

hi&#xff0c;我是熵减&#xff0c;见字如面。 在软件工程中&#xff0c;最终的价值交付&#xff0c;都是要通过软件的部署上线来完成的。 那如何将新的或改进的软件功能交付给用户&#xff0c;同时还要确保高质量、稳定性和用户体验&#xff0c;选择适当的部署策略变得至关重…

数字中国,开鸿见日

讲个小故事&#xff0c;《晋书乐广传》记载&#xff0c;西晋名士乐广&#xff0c;请大文学家潘岳替自己写一篇文章。潘岳让乐广把意思完完整整告诉他&#xff0c;再由他来动笔&#xff0c;最终写成了名扬当时的《呈太尉辞河南尹表》。时人看过这篇文章&#xff0c;评价乐广是“…

WPF开发txt阅读器5:书籍管理系统,文件夹对话框

文章目录 书柜类文件夹对话框验证 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录字体控件绑定 书柜类 任何小说阅读器&#xff0c;都免不了要有一个书架功能&#xff0c;而所谓书架&#xff0c;其实就是一个文件夹&#xff0c;通过对…

postgre查询今天,昨天的数据

昨天数据 SELECT* FROMsys_device WHERE age(current_date,to_timestamp(substring(update_time FROM 1 FOR 10),yyyy-MM-dd)) 1 days; 今天数据 SELECT* FROMsys_device WHERE to_char(update_time:: DATE, yyyy-MM-DD hh 24: mi :s) to_char(CURRENT_DATE:: DATE, …

nodejs+vue+mysql汽车新闻资讯网站jtw43

本汽车资讯网站有管理员和用户。管理员功能有个人中心&#xff0c;用户管理&#xff0c;汽车品牌管理&#xff0c;价格分类管理&#xff0c;经销商管理&#xff0c;汽车信息管理&#xff0c;留言板管理&#xff0c;系统管理等。用户可以查看各种汽车信息&#xff0c;还可以进行…

无人机上仅使用CPU实时运行Yolov5(OpenVINO实现)(上篇)

Intel CPU在运行视觉导航等算法时实时性要优于Nvidia等平台&#xff0c;如Jetson Tx2&#xff0c;NX。而Nvidia平台在运行深度学习算法方面具有很大优势&#xff0c;两种平台各有利弊。但是&#xff0c;Intel OpenVINO的推出允许NUC平台实时运行深度学习模型&#xff0c;如目前…

Zookeeper 3.5.7

文章目录 1、Zookeeper 入门1.1 概述1.2 特点1.3 数据结构1.4 应用场景 2、本地安装2.1 本地模式安装2.2 配置参数解读 3、集群操作3.1 集群操作3.1.1 集群安装3.1.2 选举机制&#xff08;面试重点&#xff09;3.1.3 集群启停脚本 3.2 客户端命令行操作3.2.1 命令行语法3.2.2 z…

你没见过的黑科技,真会玩

很久之前分享过谷歌浏览器那些有趣的隐藏功能 &#xff0c;今天再分享几个浏览器黑科技。 第一个是这个项目https://github.com/zserge/awfice &#xff0c;利用data URI浏览器也可以当编辑器&#xff0c;输入data:text/html,<body contenteditable styleline-height:1.5;fo…

电力电子助力小米快充生态,磁材创新驱动未来无线充电

6月14日&#xff0c;第二届非晶合金材料在电力电子产业发展中的机遇与挑战研讨会于上海开幕。小米手机部工程师史学伟作为代表出席本次会议&#xff0c;并作《小米无线快充生态纳米晶合金材料应用及材料发展建议》主题报告&#xff0c;分享小米无线充电技术与产品应用&#xff…

【WinForm】C#实现商场收银软件,从面向过程到面向对象,设计模式的应用

文章目录 前言一、收银系统版本11、运行效果2、界面设计3、代码 二、收银系统版本21、运行效果2、界面设计3、代码&#xff1a; 三、收银系统版本31、运行效果2、界面设计3、代码 四、收银系统版本41、运行效果2、界面设计3、代码 总结面向对象23中设计模式总结设计模式关系图 …

C++类的成员变量和成员函数

类的成员变量和普通变量一样&#xff0c;也有数据类型和名称&#xff0c;占用固定长度的内存。但是在定义类的时候不能对成员变量赋值&#xff1b; 类的成员函数也和普通函数一样&#xff0c;都有返回值和参数列表&#xff0c;它与一般函数的区别是&#xff0c;成员函数是一个…

OpenAI深夜放毒:发布GPT-4新模型,GPT-3.5支持16K上下文,并且价格降低75%

一觉起来&#xff0c;发现OpenAI Twitter更新了&#xff0c;而且更新力度很大&#xff0c;这真是深夜放毒。 下面我们看下OpenAI本次的重大更新都有哪些&#xff1f; 函数调用能力 在Chat Completions API中引入了新的功能调用能力。gpt-4-0613和gpt-3.5-turbo-0613版本已进行了…

原创 | 一文读懂足球比赛中的随机博弈

作者&#xff1a;陈之炎本文约1500字&#xff0c;建议阅读5分钟 本文介绍了如何在足球比赛中读懂随机博弈。 据悉世界足坛的传奇球星梅西将于2023年6月中率领阿根廷国家足球队来到中国北京&#xff0c;参加一场备受瞩目的比赛。这场比赛成为了足球迷们心心念念的盛事&#xff0…