【手册】——mq延迟队列

目录

  • 一、背景介绍
  • 二、思路&方案
  • 三、过程
    • 1.项目为啥用延迟队列?
    • 2.项目为啥用三方延迟队列?
    • 3.项目中为啥用rabbitmq延迟队列?
    • 4.rabbitmq延迟队列的安装
    • 5.rabbitmq的延迟队列配置方式
      • 5.1.exchange配置
      • 5.2.queues配置
      • 5.3.exchange和queues的绑定
    • 6.rabbitmq的延迟队列java集成方式
      • 6.1.pom文件中加入依赖
      • 6.2.配置文件中加入配置项
      • 6.3.增加类,设置对应exchange和queues的消息监听
  • 四、总结
  • 五、升华

一、背景介绍

对于mq延时队列,产品中对应的应用场景用到了,自己也在执行过程中踩了认知上的坑,历历在目的画面让我不由得动笔总结。

二、思路&方案

  • 1.项目为啥用延迟队列?
  • 2.项目为啥用三方延迟队列?
  • 3.项目中为啥用rabbitmq延迟队列?
  • 4.rabbitmq延迟队列的安装
  • 5.rabbitmq的延迟队列配置方式
  • 6.rabbitmq的延迟队列java集成方式

三、过程

1.项目为啥用延迟队列?

项目中有这样一个业务需求,需要再未来某个时间点执行任务,这些任务或消息可能由于某些原因(如依赖其他任务的完成、等待特定时间、进行定时操作等)不能立即处理。通过使用延迟队列,可以确保这些任务或消息在指定的延迟时间后得到处理,从而实现更为灵活和高效的任务调度。

1.1. 解耦:通过将需要延迟处理的任务放入队列,实现了业务逻辑与延迟处理逻辑的解耦,使得代码更加清晰和易于维护。
可扩展性:延迟队列可以轻松地水平扩展,以应对大量延迟任务的处理需求。通过增加队列的数量或调整消费者的数量,可以灵活地调整系统的处理能力。
1.2. 高可用性:一些延迟队列实现(如RabbitMQ的延迟插件、Redis的有序集合等)提供了持久化机制,即使系统崩溃或重启,也能确保延迟任务不会丢失。

2.项目为啥用三方延迟队列?

2.1. 功能完善与性能优化:第三方延迟队列经过大量的实践和优化,通常具有更完善的功能和更高的性能。它们可能已经解决了许多常见的延迟队列问题,如精确的延迟时间控制、高并发处理、消息的持久化等,从而减少了自行开发可能遇到的困难和风险。
2.2. 可靠性与稳定性:第三方延迟队列通常经过严格的测试和验证,具有更高的可靠性和稳定性。它们可能提供了数据备份、容错处理、负载均衡等机制,确保在复杂的网络环境和系统压力下,延迟队列仍然能够稳定、可靠地运行。
2.3. 易于集成与维护:使用第三方延迟队列可以简化项目的集成工作。这些队列通常提供了丰富的API和文档,方便开发者快速集成到项目中。同时,由于第三方队列的维护和更新由专业的团队负责,开发者可以专注于业务逻辑的实现,而无需过多关注底层技术的细节。
2.4. 成本考虑:虽然自行编写延迟队列可以根据项目需求进行定制,但这通常需要投入大量的人力和时间成本。而使用成熟的第三方延迟队列,则可以快速实现功能,减少开发周期和成本。

3.项目中为啥用rabbitmq延迟队列?

3.1.RabbitMQ:通过插件或死信队列机制实现,具有灵活性和可扩展性,但需要一定的配置和管理工作。
3.2.Redis:利用有序集合数据结构实现,简单直观且性能较高,但需要定期轮询检查延迟消息。
3.3.Kafka:通常需要结合其他组件或自定义实现来模拟延迟队列,可以实现复杂的流处理和延迟逻辑,但相对复杂且需要更多的开发工作。
3.4.Amazon SQS:直接支持延迟队列功能,无需额外配置和管理工作,适合在云环境中使用。

4.rabbitmq延迟队列的安装

安装方式借鉴如下博文即可:
【rabbitmq 实现延迟消息-插件版本安装(docker环境)】

5.rabbitmq的延迟队列配置方式

5.1.exchange配置

在这里插入图片描述

5.2.queues配置

在这里插入图片描述

5.3.exchange和queues的绑定

在这里插入图片描述

6.rabbitmq的延迟队列java集成方式

6.1.pom文件中加入依赖

  <!-- amqp依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>2.3.5.RELEASE</version></dependency>

6.2.配置文件中加入配置项

spring:rabbitmq:host: rabbitmq域名port: rabbitmq端口virtual-host: 指定的virtual-host,默认可以是/username: 账号password: 密码#MQ业务配置#exchangeclassEndExchange: class_end_exchange#queuesclassEndQueues: Class.End.Queue#exchange和queues绑定时候的routingkeyclassEndRoutingKey: delayed_class_end

6.3.增加类,设置对应exchange和queues的消息监听

@Service
public class classEndQueues {@RabbitListener(queues = {"${spring.rabbitmq.classEndQueues}"})public synchronized void endClass(Message message){String messageString = new String(message.getBody());System.out.println(" endClass接收到的结束消息为:"+messageString );//要处理的业务}
}

四、总结

  • 1.逻辑性思考,一环一环,一步一步的去找,少了哪一步也都会出现断层,而断层所带来的代价是付出更多的时间成本;而总结的意义恰恰是避免类似的事情以后再付出更大的成本
  • 2.经验办事,想当然的办事所带来的认知陷阱,会成为一个扣了盖子的井
  • 3.于此形成相关手册,进行总结的过程是给自己未来建立一个连接点的过程

五、升华

写博文的深意,又有了更多维度的思考,它能够让作者静心思考,从宏观、微观、行为、心理的角度去思考、去总结、去升华。
在这里插入图片描述

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

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

相关文章

企业招聘,应用MBTI来做人才测评招聘测评

每年的校招季都是企业争抢优秀应届毕业生人才的忙碌季。只有精准识人用人&#xff0c;才能不断为企业注入新鲜活力和青春智慧。但是随着毕业生数量越来越多&#xff0c;企业如何在招聘中精准发现自己最需要的人才&#xff0c;成为摆在人力资源部门的大难题。人才测评是各企业都…

【蓝桥杯】矩阵快速幂

一.快速幂概述 1.引例 1&#xff09;题目描述&#xff1a; 求A^B的最后三位数表示的整数&#xff0c;A^B表示&#xff1a;A的B次方。 2&#xff09;思路&#xff1a; 一般的思路是&#xff1a;求出A的B次幂&#xff0c;再取结果的最后三位数。但是由于计算机能够表示的数字…

机器学习周报第35期

目录 一、文献阅读&#xff1a;You Only Look Once: Unified, Real-Time Object Detection1.1 摘要1.2 背景1.3 论文模型1.4 网络设计1.5 YOLO的局限性1.6 实现代码 target 7*7*30 值域为0-1 一、文献阅读&#xff1a;You Only Look Once: Unified, Real-Time Object Detection…

Redis入门到实战-第二十二弹

Redis入门到实战 Redis高可用Sentinel官网地址Redis概述虚拟机配置在主从复制环境的基础上添加Sentinel更新计划 Redis高可用Sentinel 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一…

效率工具RunFlow完全手册之基础篇

RunFlow是我们开发的一款全新的效率工具&#xff0c;本文作为RunFlow操作手册和功能演示的基础篇&#xff0c;想了解我们有哪些新特性可以阅读我们的这篇文章&#xff0c;这里就不过多赘述了&#xff0c;我们直接开始。 关键字 关键字是我们的一个核心概念&#xff0c;一个功…

【WEEK5】 【DAY4】数据库操作【中文版】

2024.3.28 Thursday 目录 2.数据库操作2.1.数据库2.1.1.新建数据库&#xff08;右键的方法&#xff09;2.1.2.查询&#xff1a;点击“查询”->“新建查询表”即可输入所需要的语句&#xff0c;点击“运行”&#xff0c;如&#xff1a; 2.2.结构化查询语句分类2.3.数据库操作…

Mac 版 IDEA 中配置 GitLab

一、安装Git 在mac终端输入Git检测指令&#xff0c;可以通过git命令查看Git是否安装过&#xff0c;如果没有则会弹出安装按钮&#xff0c;如果安装过则会输出如下信息。 WMBdeMacBook-Pro:~ WENBO$ git usage: git [--version] [--help] [-C <path>] [-c namevalue][--…

PostgreSQL到Doris的迁移技巧:实时数据同步新选择!

PostgreSQL可以说是目前比较抢手的关系型数据库了&#xff0c;除了兼具多样功能和强大性能之外&#xff0c;还具备非常优秀的可扩展性&#xff0c;更重要的是它还开源&#xff0c;能火不是没有理由的。 虽然PostgreSQL很强大&#xff0c;但是它也有短板&#xff0c;相对于专业…

Netty实现文件服务器

1.文件上传下载的常用方法 文件上传下载是一种非常常见的功能&#xff0c;特别是在web服务网站。 常用的文件上传下载协议有以下几种&#xff1a; FTP&#xff08;File Transfer Protocol&#xff09;:是一种用于在计算机间传输文件的标准网络协议。它使用客户端-服务器架构…

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换

系列文章目录 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记01&#xff1a;赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记02&#xff1a;开发环境安装 嵌入式|蓝桥杯STM32G431&#xff08;…

2024年天津体育学院退役大学生士兵专升本专业考试报名安排

天津体育学院2024年退役大学生士兵免试专升本招生专业考试报名安排 一、报名安排 1.报名对象&#xff1a;免于参加天津市文化考试的退役大学生士兵&#xff08;已参加天津市统一报名且资格审核通过&#xff09; 2.报名时间&#xff1a;2024年4月4日9&#xff1a;00-4月5日17…

Stream流 --java学习笔记

什么是Stream? 也叫Stream流&#xff0c;是|dk8开始新增的一套APl(java.util.stream.*)&#xff0c;可以用于操作集合或者数组的数据。优势:Stream流大量的结合了Lambda的语法风格来编程&#xff0c;提供了一种更加强大&#xff0c;更加简单的方式操作集合或者数组中的数据&a…

1.10 类、方法、封装、继承、多态、装饰器

一、介绍类 类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例 实例化&#xff1a;创建一个类的实例&#xff0c;类的具体对象。 对象&#xff1a;通过类定义的数据结构实例。对象包括两个数据成员&#x…

windows安全中心设置@WindowsDefender@windows安全中心常用开关

文章目录 abstractwindows defender相关服务&#x1f47a; 停用windows Defender临时关闭实时防护使用软件工具关闭defender control(慎用)dismdControl 其他方法使其他杀毒软件注册表修改 保护历史恢复被认为是有病毒的文件添加信任目录,文件,文件类型或进程 abstract window…

算法学习——LeetCode力扣动态规划篇4(377. 组合总和 Ⅳ、322. 零钱兑换、279. 完全平方数、139. 单词拆分)

算法学习——LeetCode力扣动态规划篇4 377. 组合总和 Ⅳ 377. 组合总和 Ⅳ - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保…

2、Cocos Creator 下载安装

Cocos Creator 从 v2.3.2 开始接入了全新的 Dashboard 系统&#xff0c;能够同时对多版本引擎和项目进行统一升级和管理&#xff01;Cocos Dashboard 将做为 Creator 各引擎统一的下载器和启动入口&#xff0c;方便升级和管理多个版本的 Creator。还集成了统一的项目管理及创建…

pytorch反向传播算法

目录 1. 链式法则复习2. 多输出感知机3. 多层感知机4. 多层感知机梯度推导5. 反向传播的总结 1. 链式法则复习 2. 多输出感知机 3. 多层感知机 如图&#xff1a; 4. 多层感知机梯度推导 简化式子把( O k O_k Ok​ - t k t_k tk​) O k O_k Ok​(1 - O k O_k Ok​)起个别名…

Python(django)之单一接口展示功能前端开发

1、代码 建立apis_manage.html 代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>测试平台</title> </head> <body role"document"> <nav c…

谈谈 MySQL 的锁

前言 在MySQL中&#xff0c;锁这个定义其实还是蛮重要的。经过我这几天的学习&#xff0c;我感觉锁是一个可以说难又可以说不难的知识点。难就难在锁可以与事务、多线程、并发结合在一起&#xff0c;这就很难了。但是&#xff0c;假如锁没有结合这些知识点&#xff0c;就单单一…

webpack搭建开发环境

webpack搭建开发环境 一.webpack开发模式二.webpack打包模式三.webpack打包模式应用四.Webpack 前端注入环境变量五.Webpack 开发环境调错 source map六. Webpack 设置解析别名路径七.优化-CDN的使用八.多页面打包九.优化-分割公共代码一.webpack开发模式 作用:启动 Web 服务…