springboot 整合 rabbitMQ (延迟队列)
前言:
延迟队列是一个内部有序的数据结构,其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间,意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之,延时队列被设计用于存放那些需要在特定时间到达时才处理的元素。
使用场景:
1、定时任务调度:在任务调度系统中,延时队列可以用来安排任务在未来的某个时间点执行,比如定时发送邮件、消息推送、定时刷新缓存等。
2、订单超时取消:在电子商务网站中,未在规定时间内完成的订单可以通过延时队列来设置超时取消,如果订单在队列规定的延迟时间内没有被支付,系统将会自动取消订单。
3、消息重试机制:在消息队列中,如果消息处理失败了,可以将消息放入延时队列中,等待一段时间后再次尝试处理,以实现重试机制。
4、缓存数据过期:对于缓存系统,延时队列可以用来管理数据的过期时间,当数据在队列中的时间超过了设定的延迟时间,就将其从缓存中移除。
5、会话管理:在Web应用中,可以使用延时队列来管理用户会话的过期时间,当会话超过设定的有效时间后,系统将自动销毁会话。
6、任务延迟执行:有些任务可能需要在特定的时间窗口之后执行,比如数据分析任务可能需要在当天结束后才能进行,延时队列可以用来实现这种延迟执行。
7、权限验证Token过期:在安全系统中,发放的Token通常有有效时间,延时队列可以用来检测Token是否过期,并在过期时将其从系统中移除。
配置类:
配置文件
启动创建延迟队列和交换机
/*** 延迟队列*/ @Configuration public class DelayedQueueConfig {/** 队列 */public static final String DELAYED_QUEUE_NAME="delayed_queue";/** 交换机 */public static final String DELAYED_EXCHANGE_NAME="delayed_exchange";/** 交换机类型 */public static final String DELAYED_EXCHANGE_TYPE="x-delayed-message";/** 交换机路由键 */public static final String DELAYED_ROUTING_KEY="delayed";/** 声明延迟队列 */@Beanpublic Queue delayedQueue() {return new Queue(DELAYED_QUEUE_NAME);}/** 声明延迟队列交换机 */@Beanpublic CustomExchange delayedExchange() {Map<String, Object> map = new HashMap<>();map.put("x-delayed-type", "direct");/*** 声明自定义交换机* 第一个参数: 交换机名称* 第二个参数: 交换机类型* 第三个参数: 是否需要持久化* 第四个参数: 是否自动删除* 第五个参数: 其他参数*/return new CustomExchange(DELAYED_EXCHANGE_NAME, DELAYED_EXCHANGE_TYPE, true, false, map);}/** 绑定队列和延迟交换机 */@Beanpublic Binding delayedQueueBindingDelayedExchange(@Qualifier("delayedQueue") Queue delayedQueue,@Qualifier("delayedExchange") Exchange delayedExchange) {return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(DELAYED_ROUTING_KEY).noargs();}}
生产者:
示例:商城项目生成订单后超过30分钟不支付自动取消订单
第一个参数:交换机名称
第二个参数:路由键
第三个参数:消息体
第四个参数:消息后处理器
//将订单id放入延迟队列 延迟30分钟后没有支付取消订单 释放库存 rabbitTemplate.convertAndSend(DelayedQueueConfig.DELAYED_EXCHANGE_NAME,DelayedQueueConfig.DELAYED_ROUTING_KEY,mallOrder.getId(),message -> {//设置到期时间 方便测试这里设置30秒message.getMessageProperties().setDelay(10000);return message;});
消费者:
@RabbitListener(queuesToDeclare =@Queue(DelayedQueueConfig.DELAYED_QUEUE_NAME))public void consume(Integer orderId, Message message, Channel channel) {log.info("延时队列监听到消息,订单id为:{}", orderId);long deliveryTag = message.getMessageProperties().getDeliveryTag();//接收消息后代码try {//手动提交channel.basicAck(deliveryTag, false);} catch (IOException e) {throw new RuntimeException(e);}}
相关文章:

springboot 整合 rabbitMQ (延迟队列)
前言: 延迟队列是一个内部有序的数据结构,其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间,意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之,延时队列被设计用于存放那…...

ES 基本使用与二次封装
概述 基本了解 Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它提供了对海量数据的快速全文搜索、结构化搜索和分析功能,是目前流行的大数据处理工具之一。主要特点即高效搜索、分布式存储、拓展性强 核心功能 全文搜索:…...

分割一切2.0,SAM2详解
🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月24日20点03分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...
Spring AI Fluent API:与AI模型通信的流畅体验
引言 随着人工智能(AI)技术的飞速发展,越来越多的应用场景开始融入AI技术以提升用户体验和系统效率。在Java开发中,与AI模型通信成为了一个重要而常见的需求。为了满足这一需求,Spring AI引入了ChatClient,…...

基于python的长津湖评论数据分析与可视化,使用是svm情感分析建模
引言 研究背景及意义 上世纪初开始,中国电影就以自己独有的姿态登上了世界电影史的舞台。中国电影作为国家文化和思想观念的反映与延伸,能够增强文化自信,在文化输出方面有着极其重要的作用1[1]。 改革开放以来,随着生产力的提高…...

Lucene(2):Springboot整合全文检索引擎TermInSetQuery应用实例附源码
前言 本章代码已分享至Gitee: https://gitee.com/lengcz/springbootlucene01 接上文。Lucene(1):Springboot整合全文检索引擎Lucene常规入门附源码 如何在指定范围内查询。从lucene 7 开始,filter 被弃用,导致无法进行调节过滤。 TermInSetQuery 指定…...
shell完结
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

【2024最新】基于Springboot+Vue的智慧食堂系统Lw+PPT
作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…...

NVR小程序接入平台EasyNVR多品牌NVR管理工具:高效管理分散视频资源的解决方案
在当今数字化、智能化的时代背景下,视频监控已成为各行各业不可或缺的一部分,从公共安全到企业运维,再到智慧城市建设,视频资源的管理与应用正面临着前所未有的挑战。如何高效整合、管理这些遍布各地的分散视频资源,成…...
排序算法(三)--插入排序
文章目录 一、插入排序的基本原理二、插入排序的C语言实现三、代码解析 插入排序 C语言实例 一、插入排序的基本原理 插入排序的基本思想是将数组中的元素逐一取出,然后将其插入到已经排好序的部分中的适当位置,直到整个数组排序完成。具体步骤如下&…...

YOLOv11融合[ECCV 2018]RCAN中的RCAB模块及相关改进思路
YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《Image Super-Resolution Using Very Deep Residual Channel Attention Networks》 一、 模块介绍 论文链接:https://arxiv.org/abs/1807…...

排序(Java数据结构)
1. 排序的概念及引用 1.1 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。(所有的排序都是默认从小到大排序) 稳定性:假定在待排序的记录序列中ÿ…...

【Java 解释器模式】实现高扩展性的医学专家诊断规则引擎
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...

【超详细】卷积神经网络CNN基本架构以及工作原理详解
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

Html前后端Ajax交互数据前端JavaScript脚本后台C#ashx服务
本示例使用设备:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bU8Fdbo&ftt&id615391857885 前端以GET模式向后台请求数据 function MyGetAjax() {var xhr new XMLHttpRequest();xhr.open(GET, http://192.168.1.211/HttpReader.ash…...
问:Spring Boot应用监控组件工具,梳理一下?
在日常运维与开发过程中,Spring Boot 应用的监控是确保系统稳定性和性能的关键环节。本文将探讨 Spring Boot 常用的监控组件及工具的原理、适用场景,并针对不同场景下的运维监控方案进行介绍。 1. Spring Boot Actuator 原理: Spring Boo…...

利用Hooka开源的多种功能shellcode加载器实现快速免杀火绒,静态360+360杀毒,微步查杀1,vt查杀7(教程)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于…...

2025-2026财年美国CISA国际战略规划(下)
文章目录 前言四、加强综合网络防御(一)与合作伙伴共同实施网络防御,降低集体风险推动措施有效性衡量 (二)大规模推动标准和安全,以提高网络安全推动措施有效性衡量 (三)提高主要合作…...

iframe通过url方式来获传递的参数
iframe通过url方式来获传递的参数 一、src"http://xxxx/#/policyOverview?codeaaaa"二、 src"/static/iframePhone/html/main.html?codeaaaa" 一、src“http://xxxx/#/policyOverview?codeaaaa” <iframedata-v-47a50536""src"http:/…...

蓝桥杯不知道叫什么题目
小蓝有一个整数,初始值为1,他可以花费一些代价对这个整数进行变换。 小蓝可以花贵1的代价将教数增加1。 小蓝可以花费3的代价将整数增加一个值,这个值是整数的数位中最大的那个(1到9) .小蓝可以花费10的代价将整数变为原来的2倍, 例如,如果整…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...