SpringBoot实现RabbitMQ延迟队列

news2025/2/2 1:04:18
  • RabbitMQ实现延迟队列的两种方式
  1. 利用RabbitMQ插件方式实现延迟队列
  2. 利用RabbitMQ死信队列实现延迟队列
  • 插件方式实现延迟队列
  1. 下载插件:Community Plugins | RabbitMQ 

  1. 按照官网步骤安装插件

installing Additional Plugins | RabbitMQ

  1. 插件方式实现延迟队列,代码上修改重点在消息发送时
rabbitTemplate.convertAndSend(SyncConst.MQ_MARKING_EXCHANGE,SyncConst.DATAMARKING_QUEUE_COUNT_HOST_STAT_COST,
        statCostHour,messagePostPro->{
            messagePostPro.getMessageProperties().setDelay(1000*60*10);
            return messagePostPro;
        },new CorrelationData(UUID.randomUUID().toString()));

  • 死信队列实现延迟队列
  1. 实现原理
  1. 发送消息时发送给普通队列,并且给普通队列设置过期时间(即延迟时间)
  2. 消息过期后RabbitMQ自动转发到死信队列
  3. 消费端监听死信队列并且消费,实现延迟消费目的
  1. 配置重点
  1. 利用死信队列实现延迟队列,需要配置两组队列,queue、exchange、routeKeys都要有。
  2. 普通队列要额外配置三个参数:
x-dead-letter-exchange:死信队列交换机
x-dead-letter-routing-key:死信队列路由key
x-message-ttl:过期时间(延迟时间)
  1. 代码重点
  1. 消费端监听死信队列
  2. 发送消息时,也可以设置过期时间(延迟时间)
rabbitTemplate.convertAndSend(SyncConst.MQ_MARKING_EXCHANGE,SyncConst.DATAMARKING_QUEUE_HOST_STAT_COST,

        statCostHour,messagePostPro->{

            messagePostPro.getMessageProperties().setExpiration(String.valueOf(1000*60*10));

            return messagePostPro;

        },new CorrelationData(UUID.randomUUID().toString()));
  • 二者区别
  1. 插件方式,要修改RabbitMQ环境,如果使用k8s等容器环境部署RabbitMQ可能比较麻烦。优点是,代码改动少,不会增加额外exchange和queue。
  2. 死信队列,开发人员利用代码即可实现,无需修改RabbitMQ环境,对使用中的生产环境相对安全。缺点是增加额外exchange和queue,后期维护人员可能不容易理清逻辑。

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

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

相关文章

BOM系统:贯穿制造全程的管理利器

在制造行业中,BOM系统的应用已经成为提高生产效率、降低成本和确保产品质量的关键因素。BOM系统作为产品结构和物料清单的管理工具,为制造企业提供了全面的控制和协同能力。 1.产品设计与开发:在产品设计阶段,BOM系统为工程师提供…

【C语言】InfiniBand内核驱动_mlx4_ib_post_send

一、注释 以下是_mlx4_ib_post_send函数的注释,该函数用于处理InfiniBand工作请求(WRs)的发送过程: static int _mlx4_ib_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr,const struct ib_send_wr **bad_wr, bool …

再见 mysql_upgrade

在数据库管理的世界里,随着技术的不断进步和业务的不断发展,数据库的版本升级成为了一个不可避免的过程。 MySQL 作为业界领先的开源关系型数据库管理系统,其版本迭代与功能优化同样不容忽视。 而在这个过程中,升级工具就显得尤为…

vsqt更改ui,cpp报错(唯二)解决方法,及ui界面布局在cpp文件的运用基本流程

qt的ui布局界面如下 点cpp文件->编译 此时就会自动生成ui_xxx.h 这里是ui文件里面就有类名:Ui_文件名字 下面就有一个类继承于这个类 你所使用的这个ui指针,就这么来的 ***报错解决方法有两种:***第一种:如果改了ui&#x…

括号生成(回溯+剪枝)

22. 括号生成 - 力扣(LeetCode) 题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 样例输入 示例 1: 输入:n 3 输出:["((()))&q…

基于SSM的百货中心供应链管理系统设计与实现(论文+源码)_kaic

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套百货中心供应链管理系统有管理…

一篇复现Dockerfile指令

华子目录 制作镜像基于dockerfile制作镜像dockerfile介绍注意 格式PATH上下文路径URL- Dockerfile指令-FROM指令格式示例 Dockerfile指令-MAINTAINER指令介绍示例 Dockerfile指令-COPY指令介绍示例1示例2 Dockerfile指令-ADD指令介绍示例 Dockerfile指令-WORKDIR指令介绍示例 D…

Vue2版本封装公共echarts的监听方法

#注意 : 因为一个页面有多个图表,所以封装一个公共的js文件,方便后续使用。 适用于Vue2版本,粘贴即用即可。 1、echartsMixin.js文件如下 // echartsMixin.js import echarts from echartsexport default {data() {return {myC…

2024年EDM邮件营销群发平台怎么选?

在2024年选择适合的EDM(电子邮件直接营销)邮件营销群发平台时,需要考虑以下几个关键要素来评估云衔科技以及其他供应商的产品或服务是否符合您的需求: 一、功能完备性: 1、智能自动化:确保云衔科技提供的…

JAVA 并发编程之AQS排队同步框架

AQS 框架简介 AQS(Abstract Queued Synchronizer)抽象队列同步框架。 比如,ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch、ThreadPoolExcutor(JDK 1.8),这些类的底层原理都是AQS&a…

(十一)图像的罗伯特梯度锐化

环境:Windows10专业版 IDEA2021.2.3 jdk11.0.1 OpenCV-460.jar 系列文章: (一)PythonGDAL实现BSQ,BIP,BIL格式的相互转换 (二)BSQ,BIL,BIP存储格式的相互转换算法 (三…

AWTK 开源串口屏开发(15) - 通过 MODBUS 访问远程设备数据

在 AWTK 串口屏中,内置了 MODBUS Client 的模型,支持用 MODBUS 协议从远程设备获取数据。不用编写一行代码即可实现对远程设备数据的显示和修改。 1. 功能 不用编写代码,实现对远程设备数据的显示和修改。 2. 创建项目 从模板创建项目&am…

【生活】相机/图像各参数

文章目录 专业模式图片编辑-滤镜实体滤镜软件模拟滤镜 图片编辑-增强曝光亮度对比度饱和度自然饱和度色温色调高光阴影HSL色调分离褪色颗粒锐化晕影清晰度暗角 参考 专业模式 第一个参数WB是白平衡,调节色彩的。 第二个是对焦F,近距离拍摄物体&#xf…

67、yolov8目标检测和旋转目标检测算法部署Atlas 200I DK A2开发板上

基本思想:需求部署yolov8目标检测和旋转目标检测算法部署atlas 200dk 开发板上 一、转换模型 链接: https://pan.baidu.com/s/1hJPX2QvybI4AGgeJKO6QgQ?pwdq2s5 提取码: q2s5 from ultralytics import YOLO# Load a model model YOLO("yolov8s.yaml")…

夏季水域安全管理,AI智能识别算法防溺水视频监控方案

随着夏季的到来,不少人为了一时的痛快凉爽就私自下水游泳,特别是在野外池塘,由于长期无人监管,极易发生人员溺亡事件,如何对池塘水域进行全天候无人值守智能监管,并实现发生人员闯入就立即告警?…

网安播报 | GitHub遭遇严重的供应链“投毒”攻击,影响GG平台

1、GitHub遭遇严重的供应链“投毒”攻击,影响GG平台 多年来,威胁行为者一直在使用多种策略、技术和程序 (TTP),包括劫持 GitHub账户、分发恶意 Python 包、使用虚假的 Python 基础设施以及社会工程进行攻击&#xff0c…

Django屏蔽Server响应头信息

一、背景 最近我们被安全部门的漏洞扫描工具扫出了一个服务端口的漏洞。这个服务本身是一个Django启动的web服务,并且除了登录页面,其它页面或者接口都需要进行登录授权才能进行访问。 漏洞扫描信息和提示修复信息如下: 自然这些漏洞如何修复&#xff0c…

物理寻址和功能寻址,服务器不同的应答策略和NRC回复策略

1:功能寻址,服务器应答与NRC回复策略 详细策略上,又分为服务有子功能,和不存在子功能。 1.1功能寻址,存在子功能 存在子功能的情况下,又分为supress postive response (即子功能字节的bit7&a…

Ollama+WebUI+AnythingLLM,构建安全可靠的个人/企业知识库

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 ​ 发布在https://it.weoknow.com 我有一名AI助手,名字叫"老六"。为什么呢?是因为它有时候会…

Java运算符-三元运算符,这你必须得会!

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…