Redisson实现延迟队列

延迟队列是指在队列中存储带有过期时间的数据,在过期时间到达时自动从队列中移除。

延时队列的使用场景:

  • 订单超过15分钟未支付自动取消
  • 推送数据至第三方平台,如果失败重新入队推送,推送间隔时间随着失败次数增加而扩大。
  • 分布式情况下一个定时任务往队列内推,多个实例同时处理任务。

Redisson实现的延迟队列是基于Redis的zset命令实现的,通过将数据存储到zset中,并设置过期时间作为score,通过定时任务轮询zset来实现延迟队列的功能。

以下提供一个 RedisDelayQueueUtil 来简化操作。

@Slf4j
@Component
public class RedisDelayQueueUtil implements ApplicationContextAware {private static RedissonClient redissonClient;/*** 添加延迟队列* @param value 队列值* @param delay 延迟时间* @param timeUnit 时间单位* @param queueCode 队列键* @param <T>*/public static <T> void addDelayQueue(T value, long delay, TimeUnit timeUnit, String queueCode){try {RBlockingDeque<Object> blockingDeque = redissonClient.getBlockingDeque(queueCode);RDelayedQueue<Object> delayedQueue = redissonClient.getDelayedQueue(blockingDeque);delayedQueue.offer(value, delay, timeUnit);log.info("Redisson添加延时队列成功 队列键:{},队列值:{},延迟时间:{}", queueCode, value, timeUnit.toSeconds(delay) + "秒");} catch (Exception e) {log.error("Redisson添加延时队列失败 {}", e.getMessage());throw new RuntimeException("Redisson添加延时队列失败");}}/*** 获取延迟队列 - 会阻塞* @param queueCode 队列名称* @return  <T> 数据* @throws InterruptedException*/public static <T> T getDelayQueue(String queueCode) throws InterruptedException {RBlockingDeque<T> blockingDeque = redissonClient.getBlockingDeque(queueCode);return blockingDeque.take();}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {RedisDelayQueueUtil.redissonClient = applicationContext.getBean(RedissonClient.class);}
}

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

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

相关文章

linux 查看并统计进程、线程数量: awk 分组统计

1&#xff0c;统计进程数量 #1, 统计所有进程数量 test2:/root # ps -ef |wc -l 444#2, 统计root进程数量 test2:/root # ps -U root -u root -f |wc -l 184#3, 统计非root进程数量 test2:/root # ps -U root -u root -f -N |wc -l 261#4&#xff0c;验证数量是否一致&…

小程序提交表单之后,清除表单form

构造表单 <form bindsubmit"bindFormSubmit"> <view class"main"><textarea name"textarea" value"{{content}}"></textarea> <button form-type"submit" type"primary" > 提交 &…

PHP将pdf转为图片后用OCR识别

1.确保apt包是最新 sudo apt update 2.使用apt安装 sudo apt install tesseract-ocr 3.检查版本 tesseract --version 4.pdf转成图片&#xff0c;这边需要安装imagick插件 $pdf new Imagick(); $pdf->setResolution(150, 150); $pdf->readImage(..$temp); $pdf->…

如何提高40%的Docker构建时间

1. 背景 在产品开发中构建docker镜像,随着时间的推移,会变得越来越大,构建时间也越来越长。我的目标是构建时间不超过 5 分钟。 2. 遵循Dockerfile的最佳实践 我们首先确保Dockerfile文件遵循Docker官方的最佳实践,具体做法有: 尽量使用官方的基础镜像,Docker推荐使用…

【腾讯云 TDSQL-C Serverless 产品体验】以TDSQL-C Mysql Serverless 作为数据中心爬取豆瓣图书数据

【腾讯云 TDSQL-C Serverless 产品体验】以TDSQL-C Mysql Serverless 作为数据中心爬取豆瓣图书数据 文章目录 【腾讯云 TDSQL-C Serverless 产品体验】以TDSQL-C Mysql Serverless 作为数据中心爬取豆瓣图书数据背景TDSQL-C Serverless Mysql介绍以TDSQL-C Mysql Serverless 作…

el-select 选中的值与展示的不一样

背景&#xff1a; 查询列表&#xff0c;用户名和邮箱混合展示&#xff0c;选中后只展示邮箱前缀&#xff0c;并高亮&#xff0c;保存时传整个信息&#xff0c;回显时展示前缀&#xff1b; <el-selectv-model"labelForm.notifyUser"clearablemultipleremotefilter…

记录两个Excel导出出现的问题

问题一&#xff1a;导出数据时&#xff0c;这行代码返回null&#xff0c;导致导出excel失败&#xff1b; Workbook workbook ExcelExportUtil.exportExcel(params, map);解决&#xff1a;排查出来&#xff0c;是因为版本问题&#xff0c;autopoi版本是1.2.1&#xff1b; 升级…

Nginx 实现负载均衡

目录 一&#xff1a;负载均衡介绍 二、 负载均衡具备的功能 1.提高服务器性能 2.提高系统可用性 3.提高系统的可伸缩性 4.实现流量均衡 三、示例配置&#xff0c;如何使用nginx实现负载均衡 四、负载均衡策略配置 1.基于轮询的负载均衡&#xff08;默认&#…

时间序列预测:深度学习、机器学习、融合模型、创新模型实战案例(附代码+数据集+原理介绍)

本文介绍->给大家推荐一下我的时间序列预测专栏&#xff0c;本专栏平均质量分98分&#xff0c;而且本专栏目前免费阅读&#xff0c;其中涉及机器学习、深度学习、融合模型、个人创新模型、数据分析等一系列有关时间序列的专栏&#xff0c;其中的实战的案例不仅有简单的模型类…

Vue中的 配置项 setup

setup 是 Vue3 中的一个全新的配置项&#xff0c;值为一个函数。 setup 是所有 Composition API&#xff08;组合式API&#xff09;的入口&#xff0c;是 Vue3 语法的基础。 组件中所用到的数据、方法、计算属性等&#xff0c;都需要配置在 setup 中。 setup 会在 beforeCre…

从业务到软件架构——软件建模

一、问题 1.架构到底是什么&#xff1f;架构和业务之间到底什么关系&#xff1f; 2.好的架构的设计出发点是什么&#xff1f;好的架构应该是什么样的&#xff1f; 作为一个计算机领域的词汇&#xff0c;架构的定义是&#xff1a;有关软件整体结构与组件的抽象描述&#xff0c…

C# OpenCvSharp 去除文字中的线条

效果 中间过程效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Windows.Forms; using static System.Net.Mime.MediaTypeNames;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent…

禅道系统迁移笔记

禅道是一个可免费使用的开源项目管理系统。 最近执行了一个禅道系统服务器迁移的任务。做笔记备查。 迁移基本情况&#xff1a; 将现有禅道系统转移到一个新服务器内。原服务器为CentOS 8&#xff0c;新服务器为ubuntu 20.04 LTS。 禅道版本18.2. 迁移基本思路如下&#…

Linux开发板安装Ubuntu标准桌面环境(或其他桌面环境)

我们每入手一款开发板&#xff0c;一般配套的固件系统都会默认运行相应厂商定制的桌面环境&#xff08;在一些桌面环境上定制的&#xff09;。这个时候有些同学可能不喜欢厂商定制的桌面系统想要安装其他桌面系统比如我们虚拟机上常用的Ubuntu标准桌面系统&#xff08;不建议因…

毫米波雷达技术的医疗创新:开启无创检测与监测的新时代

随着科技的不断进步&#xff0c;毫米波雷达技术正日益成为医疗领域的一项引人注目的创新。其无创性质、高分辨率和多功能性为医学诊断和监测带来了新的可能性。本文将深入探讨毫米波雷达技术在医疗创新中的应用&#xff0c;着眼于无创检测与监测领域的突破性发展。 1. 毫米波雷…

SpringBoot之Swagger

文章目录 前言一、Swagger简介二、SpringBoot集成Swagger三、配置Swagger四、配置扫描接口五、配置Swagger开关六、配置API分组七、实体配置八、常用注解 前言 作为后端开放人员&#xff0c;最烦的事就是自己写接口文档和别人没有写接口文档&#xff0c;不管是前端还是后端开发…

Python中的乘法matmul()

torch.matmul() 将两个张量相乘划分成了五种情形&#xff1a; 一维 一维、二维 二维、一维 二维、二维 一维、涉及到三维及三维以上维度的张量的乘法。 1.如果两个张量都是一维的&#xff0c;即 torch.Size([n]) &#xff0c;此时返回两个向量的点积。作用与 torch.dot() …

idea使用gradle教程 (idea gradle springboot)2024

这里白眉大叔&#xff0c;写一下我工作时候idea怎么使用gradle的实战步骤吧 ----windows 环境----------- 1-本机安装gradle 环境 &#xff08;1&#xff09;下载gradle Gradle需要JDK的支持&#xff0c;安装Gradle之前需要提前安装JDK8及以上版本 https://downloads.gra…

jenkins Java heap space

jenkins Java heap space&#xff0c;是内存不够。 两个解决方案&#xff1a; 一&#xff0c;修改配置文件 windows系统中&#xff0c;找到Jenkins的安装路径&#xff0c; 修改jenkins.xml 将 -Xmx256m 改为 -Xmx1024m 或者更大 重启jenkins服务。 二&#xff0c;jenkins增…

机器视觉人体跌倒检测系统 - opencv python 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…