redisson实现延迟队列
1.pom引入redisson
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.20.1</version></dependency>
- 整合springboot配置,这个可以参考之前整合redisson的文章,或者上面一步直接引用
redisson整合好的springboot的包 如下(本人是引入的redisson自己整合的springboot,实际一样的
只要redisson可以使用,就成功)
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.27.0</version>
</dependency>
3.配置redis的队列
import org.redisson.api.RBlockingQueue;
import org.redisson.api.RDelayedQueue;
import org.redisson.api.RedissonClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @email 1965654634@qq.com*/
@Configuration
public class RedisQueueConfig {@Beanpublic RBlockingQueue<String> blockingQueue(RedissonClient redissonClient) {//队列名称可以自己定义return redissonClient.getBlockingQueue("delayedQueue");}@Beanpublic RDelayedQueue<String> delayedQueue(RBlockingQueue<String> blockingQueue,RedissonClient redissonClient) {return redissonClient.getDelayedQueue(blockingQueue);}
}
4.创建redis的队列类
import cn.hutool.core.date.LocalDateTimeUtil;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBlockingQueue;
import org.redisson.api.RDelayedQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;/*** @email 1965654634@qq.com*/
@Slf4j
@Service
public class DelayedQueueService{@Autowiredprivate RDelayedQueue<String> delayedQueue;@Autowiredprivate RBlockingQueue<String> blockingQueue;@PostConstructpublic void init() {// 创建延迟队列ExecutorService executorService = Executors.newFixedThreadPool(1);executorService.submit(() -> {while (true) {try {// 从延迟队列中取出任务String task = blockingQueue.take();// 处理延迟任务,例如执行某个操作log.info("redis的延迟队列:{},当前时间:{}", task, LocalDateTimeUtil.formatNormal(LocalDateTime.now()));} catch (Exception e) {log.error("redis的延迟队列抛出异常", e);}}});}public String addDelayedTask(String task, long delay) {log.info("redis的延迟队列(添加)的key:{},time:{},当前时间:{}",task,delay, LocalDateTimeUtil.formatNormal(LocalDateTime.now()));// 将任务加入延迟队列delayedQueue.offerAsync(task, delay, TimeUnit.SECONDS);// 返回任务的唯一标识return task;}public void cancelDelayedTask(String task) {log.info("redis的延迟队列(移除)的key:{},当前时间:{}",task, LocalDateTimeUtil.formatNormal(LocalDateTime.now()));// 从延迟队列中移除任务delayedQueue.remove(task);}
}
5.测试controller
@PostMapping("/queueAdd")public ResponseResult<Boolean> queueAdd(String task,Long time){log.info("测试添加的key:{},time:{},当前时间:{}",task,time, LocalDateTimeUtil.formatNormal(LocalDateTime.now()));delayedQueueService.addDelayedTask(task,time);return ResponseResult.ok();}@PostMapping("/queueDel")public ResponseResult<Boolean> dianTiAlarm(String task,Long time){log.info("测试删除的key:{},time:{},当前时间:{}",task,time, LocalDateTimeUtil.formatNormal(LocalDateTime.now()));delayedQueueService.cancelDelayedTask(task);return ResponseResult.ok();}
相关文章:
redisson实现延迟队列
1.pom引入redisson <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.20.1</version></dependency>整合springboot配置,这个可以参考之前整合redisson的文章,…...
【教程】N2N V3内网穿透、异地组网,包括Win/Linux/Android,包括不同内网实现adb远程连接
目录 一、背景 二、Linux 配置 并运行 N2N - Supernode (必选) 三、Linux -- 配置 并运行 N2N - 边缘节点配置 Edge(可选步骤) 四、Windows -- 配置 并运行 N2N - 边缘节点配置 Edge (可选步骤) (一)配置 TAP 虚拟网卡 (二)配置 N...
JavaAPI常用类01
目录 概述 Object类 Object类_toString() 代码展示 重写toString()方法前后输出 Object类_equals() 代码展示 重写equals()方法前后输出对比 Arrays类 equals()方法 Binary Search(二分查找) copyOf()方法 sort()方法 了解sort()方法 进阶…...
在 where子句中使用子查询(二)
目录 ANY ANY :功能上与 IN 是没有任何区别的 >ANY :比子查询返回的最小值要大 ALL >AL :比子查询返回的最大值要大 EXISTS() 判断 NOT EXISTS Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209…...
TongWEB(东方通),部署WEB前后端项目步骤
我的系统: 银河麒麟桌面系统V10(SP1)(兆芯) 环境需要搭建好,什么redis,数据库等 1.准备项目前端war包 (我后端项目本就是war部署,jar转war自行百度一下吧) 进入前端打包好的dist文件夹,创建一个文件夹 WEB-INF ,再在 WEB-INF 里创建一个 web.xml 文件,文件内容: <web-…...
Vue中如何使用dayjs
Day.js中文网Day.js是一个极简的JavaScript库,可以为现代浏览器解析、验证、操作和显示日期和时间。https://dayjs.fenxianglu.cn/ 单位不区别大小写,支持复数和缩写形式 单位缩写描述 date D日期 [1,31]dayd星期 [0,6](星期日0,…...
数据库-MySQL
建立索引 mysql 添加索引的三种方法 - krt-wanyi - 博客园 (cnblogs.com) 跨库联表查询 MySQL不同数据库不同表连表查询(跨库连表查询)-CSDN博客 关于微服务跨数据库联合查询的一些解决思路_微服务跨库联表查询-CSDN博客 同一个连接不同数据库前缀 …...
C语言每日一题(61)盛最多水的容器
题目链接 力扣 11 盛最多水的容器 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水…...
uni-app 经验分享,从入门到离职(四)——页面栈以及页面跳转的 API(开发经验总结)
文章目录 📋前言⏬关于专栏 🎯什么是页面栈🧩页面跳转方法📌 uni.navigateTo(OBJECT)📌 uni.redirectTo(OBJECT)📌 uni.reLaunch(OBJECT)📌 uni.switchTab(OBJECT)📌 uni.navigateBa…...
Go Module常用命令
Go Module常用命令TOC Go Module常用命令 go mod init #初始化go.mod go mod tidy #更新依赖文件 go mod download #下载依赖文件 go mod vendor #将依赖转移至本地的vendor文件 go mod edit #手…...
ubuntu压缩和解压
-c 创建 -x 解压 -v 显示过程 -f 文件名 xz格式 tar -tf arm-linux-gnueabi-5.4.0.tar.xz 查看压缩包的内容 tar -xf arm-linux-gnueabi-5.4.0.tar.xz -C / 解压 gz格式 t…...
华为HCIP Datacom H12-831 卷24
多选题 1、如图所示,某园区部署OSPF实现网络互通,其中Area1部署为NSSA区域。某工程师为了实现R1访问R4的环回口地址,在R4的OSPF进程中引入直连路由。以下关于该场景的描述,错误的有哪些项? A、在R4引入直连路由后,R1通过转换后的…...
react + Typescript 中 react有多少内置的类型 分别是什么
react Typescript 中 react有多少内置的类型 分别是什么 React 和 TypeScript 结合使用时,React 提供了一系列的内置类型(也称为类型定义或类型别名)来帮助你在 TypeScript 中编写类型安全的代码。这些类型定义涵盖了 React 的各个方面&…...
harbor(docker仓库)仓库部署 - 高可用
harbor(docker仓库)仓库部署 - 高可用 1. harbor高可用1.1 方案说明1. 双主复制2. 多harbor实例共享后端存储 1.2 部署高可用(多harbor实例共享后端存储)1. 服务器划分2. 安装harbor(先部署一套Harbor,用于…...
题目 1262: 邮局选址问题
题目描述: 在一个按照东西和南北方向划分成规整街区的城市里,n个居民点散乱地分布在不同的街区中。用x 坐标表示东西向,用y坐标表示南北向。各居民点的位置可以由坐标(x,y)表示。街区中任意2 点(x1,y1)和(x2,y2)之间的距离可以用数值|x1-x2||y1-y2|度量…...
内核内存回收关键隐藏变量之page引用计数
在分析内核内存回收源码时,page引用计数并不显眼,但是page引用计数对page的内存回收至关重要。本文基于linux-4.18.0-240版本内核源码,总结下文件页page的引用计数的相关细节。首先是get_page()和put_page()函数,分别令page引用计…...
数据结构---链表的基本操作
头插法遍历链表尾插法头删法尾删法按位置插入数据按位置删除数据直接插入排序 链表翻转快慢指针 linklist.c #include <stdio.h> #include <stdlib.h> #include "./linklist.h"linklist* create_linklist(void) {linklist* head (linklist*)malloc(siz…...
异步框架Celery在Django中的运用
参考博客:https://www.cnblogs.com/pyedu/p/12461819.html 参考视频:01 celery的工作机制_哔哩哔哩_bilibili 定义:简单灵活、处理大量消息的分布式系统,专注于实时处理异步队列,支持任务调度 主要架构: …...
YOLOv5代码解读[02] models/yolov5l.yaml文件解析
文章目录 YOLOv5代码解读[02] models/yolov5l.yaml文件解析yolov5l.yaml文件检测头1--->耦合头检测头2--->解耦头检测头3--->ASFF检测头Model类解析parse_model函数 YOLOv5代码解读[02] models/yolov5l.yaml文件解析 yolov5l.yaml文件 # YOLOv5 🚀 by Ult…...
智能搬运机器人|海格里斯将如何持续推进工业和物流的智能化升级与发展?
存取、搬运、分拣是物流行业中的通用功能,但具体到每个行业又十分不同,例如:新能源电池领域,它所搬运的东西是电池,50KG~200KG;快递行业领域,所要处理的物料是那种扁平件和信封等等,…...
逆向视角看iOS加固:从机器码到伪代码,手把手教你分析加固效果与潜在风险
逆向视角看iOS加固:从机器码到伪代码的深度解析 当你在App Store下载一个应用时,可能不会想到这个看似简单的IPA文件背后隐藏着怎样的技术博弈。作为iOS开发者或安全研究员,我们常常需要从另一个角度思考——不是如何保护自己的应用…...
终极指南:如何在PC上免费畅玩Switch游戏 - Ryujinx模拟器完整解决方案
终极指南:如何在PC上免费畅玩Switch游戏 - Ryujinx模拟器完整解决方案 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否曾经梦想在电脑上体验《塞尔达传说:…...
Unity内联序列化类的秘密
一个藏在Inspector面板背后的"俄罗斯套娃" 一、开篇:一个看似简单的问题 你在Unity中写了一个脚本: public class Player : MonoBehaviour {public int health;public float speed...
PP-DocLayoutV3入门必看:从零部署到JSON结构化输出完整流程
PP-DocLayoutV3入门必看:从零部署到JSON结构化输出完整流程 1. 开篇:认识文档布局分析利器 你是否曾经遇到过这样的困扰:面对扫描的文档图片,想要提取其中的文字和结构信息,却不知道从何下手?或者需要处理…...
【PVE实战】低成本2.5G网卡升级与iperf3性能验证全记录
1. 为什么需要升级到2.5G网络环境 最近几年,随着NAS、视频剪辑、虚拟机等应用场景的普及,传统的千兆网络(1Gbps)越来越显得力不从心。我自己就经常遇到这样的情况:在局域网内传输大文件时,千兆网络的极限速…...
TinyXML2性能优化终极指南:10个技巧让XML处理速度飙升
TinyXML2性能优化终极指南:10个技巧让XML处理速度飙升 【免费下载链接】tinyxml2 TinyXML2 is a simple, small, efficient, C XML parser that can be easily integrated into other programs. 项目地址: https://gitcode.com/gh_mirrors/ti/tinyxml2 TinyX…...
内容解锁工具:突破信息壁垒的智能解决方案
内容解锁工具:突破信息壁垒的智能解决方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,知识获取的不平等现象日益凸显。当研究人员急…...
基础知识:理解虚拟资产 / 数字商品 / 实用代币 / 稳定币 / 资产支持代币 / 数字收藏品 / 数字证券
比特币等虚拟资产全景与深度解析:超越“数字货币”的多元生态比特币等虚拟资产的世界,远比“一种数字货币”要丰富和复杂得多。理解它的第一步,就是先认识这个大家族里都有哪些成员。为了帮你建立清晰的概念,我们可以把虚拟资产看…...
前端开发者必看:5个提升AI提示词效果的实战技巧(附代码示例)
前端开发者必看:5个提升AI提示词效果的实战技巧(附代码示例) 当ChatGPT帮你生成React组件却总跑偏,当Copilot给出的代码建议总差那么点意思——作为前端开发者,你可能已经意识到:AI工具的表现力,…...
HRNet代码逐行解析:从BasicBlock到HighResolutionNet,手把手教你读懂多分辨率融合
HRNet代码深度解析:从基础模块到多分辨率融合实战 在计算机视觉领域,HRNet(High-Resolution Network)因其独特的并行多分辨率架构而备受关注。与传统的串行降采样网络不同,HRNet在整个前向传播过程中始终保持高分辨率表…...
