Springboot使用RabbitMQ实现关闭超时订单的一个简单示例
1.maven中引入rabbitmq的依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
2.application.yml中进行rabbitmq相关配置:
# rabbitmq空一格写,内嵌在spring里边
rabbitmq:host: 192.168.56.10port: 5672virtual-host: /#发送端确认机制 correlated:发布消息成功到交换器后会触发回调方法publisher-confirm-type: correlatedtemplate:# 只要抵达队列,以异步发送优先回调以异步发送优先回调我们这个returnconfirmmandatory: true# 开启发送消息抵达队列的确认publisher-returns: true
在项目启动类中添加开启rabbitmq的注解@EnableRabbit
3.创建交换机,队列,并将队列绑定到指定交换机:
import com.atguigu.gulimall.order.entity.OrderEntity;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;@Configuration
public class MyMQConfig {@Beanpublic Queue orderDelayQueue(){/* * 构造一个死信队列* x-dead-letter-exchange: order-event-exchange* x-dead-letter-routing-key: order.release.order* x-message-ttl: 60000* @create 2025/1/1**/Map<String,Object>arguments=new HashMap<>();arguments.put("x-dead-letter-exchange","order-event-exchange");arguments.put("x-dead-letter-routing-key","order.release.order");arguments.put("x-message-ttl",60000);Queue queue = new Queue("order.delay.queue", true, false, false,arguments);return queue;}@Beanpublic Queue orderReleaseOrderQueue(){Queue queue = new Queue("order.release.order.queue", true, false, false);return queue;}@Beanpublic Exchange orderEventExchange(){return new TopicExchange("order-event-exchange",true,false);}@Beanpublic Binding orderCreateOrderBinding(){return new Binding("order.delay.queue", Binding.DestinationType.QUEUE,"order-event-exchange","order.create.order",null);}@Beanpublic Binding orderReleaseOrderBinding(){return new Binding("order.release.order.queue", Binding.DestinationType.QUEUE,"order-event-exchange","order.release.order",null);}
}
在上面的代码中,创建了2个队列:order.delay.queue和order.release.order.queue,其中order.delay.queue是延时队列,为了方便演示,将延时时间设置为1分钟(60000ms)。order.release.order.queue是普通队列。创建了1个交换机:order-event-exchange。order.delay.queue队列通过路由键order.create.order绑定到order-event-exchange交换机,order.release.order.queue队列通过路由键order.release.order也绑定到order-event-exchange交换机。在交换机的选择上,考虑到要绑定到不同的队列和路由键,支持模糊匹配,这里使用Topic交换机。
4.在MyMQConfig 创建一个方法监听队列:
@RabbitListener(queues = "order.release.order.queue")public void listener(OrderEntity order, Channel channel, Message message) throws IOException {System.out.println("收到过期的订单信息,准备关闭订单"+order.getOrderSn());channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);}
添加上面的方法后,当我们的服务连上rabbitmq,rabbitmq就会创建上面@Bean标注的交换机和队列了。
5.写一个创建订单的接口,简单模拟下这个过程:
@Autowiredprivate RabbitTemplate rabbitTemplate;@GetMapping("/test/createOrder")@ResponseBodypublic String creatOrder(){OrderEntity order=new OrderEntity();order.setOrderSn(UUID.randomUUID().toString());order.setCreateTime(new Date());rabbitTemplate.convertAndSend("order-event-exchange","order.create.order",order);return "ok";}
使用rabbitTemplate将订单数据通过交换机order-event-exchange和路由键order.create.order将订单数据order发送给队列order.delay.queue。启动服务调用接口,来观察rabbitmq后台队列的变化:

可以看到 order.delay.queue队列中有1条消息等待消费,由于rabbitmq后台每隔5秒刷新一次,过1分钟再去看,队列中已有消息了。
相关文章:
Springboot使用RabbitMQ实现关闭超时订单的一个简单示例
1.maven中引入rabbitmq的依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 2.application.yml中进行rabbitmq相关配置: # rabbit…...
小程序基础 —— 07 创建小程序项目
创建小程序项目 打开微信开发者工具,左侧选择小程序,点击 号即可新建项目: 在弹出的新页面,填写项目信息(后端服务选择不使用云服务,开发模式为小程序,模板选择为不使用模板)&…...
【Golang 面试题】每日 3 题(十五)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
Docker命令(用法说明详解)
一、常见Docker容器命令 #根据image创建一个新容器并运行(即使该image已经存在容器,也会再创建一个新容器) docker run IMAGE_NAME #根据image创建一个新容器并运行。 #选项-d:指定容器为后台运行,--name自定义该容器…...
leetcode 热题100(131. 分割回文串)c++
链接:131. 分割回文串 - 力扣(LeetCode) 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1: 输入:s "aab" 输出ÿ…...
vs2022编译opencv 4.10.0
参考:Windosw下Visual Studio2022编译OpenCV与参考区别在于,没有用cmake GUI,也没有创建build目录,直接用vs2022打开了C:\code\opencv目录,即CMakeLists.txt所在根目录。没有修改默认下载地址,采用手动下载…...
Bash 中的 2>1 | tee 命令详解
Bash 中的 2>&1 | tee 命令详解 在 Linux 和 Unix 系统中,命令行提供了强大的输出控制功能,能够灵活地处理标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。本文将详…...
MySQL数据库的日志
一、概论 日志(log)是一种记录系统运行时各种状态和事件的文件。 它通常用于系统监控、故障排查、安全审计和性能分析。日志文件可以记录用户操作、系统错误、应用程序行为等信息。日志文件通常包含时间戳、事件类型、事件描述等关键信息,以…...
DataCap 2024.4.1 版本发布:MongoDB 驱动支持、工作流引擎升级
尊敬的 DataCap 用户: DataCap 2024.4.1 版本现已正式发布。本次更新包含多项重要功能升级和性能优化,现将主要更新内容公布如下: 核心功能升级 数据库功能增强 (实现功能) 新增数据库管理功能:支持创建、删除和切换数据库完善表…...
二十三种设计模式-单例模式
单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。 单例模式两种实现方法:懒汉式和饿汉式。 懒汉式(Lazy Initialization) 懒汉式单例模式在第一次被使用时才创建实例&…...
【微服务】SpringBoot 国际化适配方案使用详解
目录 一、前言 二、国际化概述 2.1 微服务中的国际化是什么 2.1.1 国际化概念 2.1.2 为什么需要国际化 2.2 微服务中常用的国际化方法 2.2.1 资源文件分离 2.2.2 使用国际化框架 2.2.3 使用动态模板 2.2.4 使用数据库存储 2.2.5 API设计结合配置中心 三、SpringBoot…...
太阳能电池板缺陷识别数据集,使用yolo,coco json,pasical voc xml格式标注,可识别旁路二极管,电池故障,热点,2234张原始图片
太阳能电池板缺陷识别数据集,使用yolo,coco json,pasical voc xml格式标注,可识别旁路二极管,电池故障,热点,2234张原始图片 以下是该项目的一些用例: 太阳能发电厂监控:该模型可用于自动化检查和识别大型…...
客户案例:基于慧集通平台集成打通小满CRM+金蝶云星空+钉钉
一、引言 本案例原型公司是一家生物科技公司,公司自开创以来专注于体外诊断生物活性原材料的研究、生产、销售和服务,致力于为全球体外诊断试剂生产企业提供领先且具有竞争力的核心原料和相关辅助产品服务。公司以卓越的产品和优质的服务赢得了客户的广…...
ubuntu 如何使用vrf
在Ubuntu或其他Linux系统中,您使用ip命令和sysctl命令配置的网络和内核参数通常是临时的,这意味着在系统重启后这些配置会丢失。为了将这些配置持久化,您需要采取一些额外的步骤。 对于ip命令配置的网络接口和路由,您可以将这些配…...
Debian-linux运维-ssh配置(兼容Jenkins插件的ssh连接公钥类型)
系统版本:Debian 12.5、11.1 1 生成密钥对 可以用云服务商控制台生成的密钥对,也可以自己在客户端或者服务器上生成, 已经有密钥对就可以跳过这步 用户默认密钥文件路径为 ~/.ssh/id_rsa,可以在交互中指定路径,也可…...
K8S详解(5万字详细教程)
目录 编辑 一、集群管理命令 二、命名空间 1. 获取命名空间列表 2. 创建命名空间 3. 删除命名空间 4. 查看命名空间详情 三、Pod 1. Pod概述 2. Pod相位状态 3. 管理命令 3.1 获取命名空间下容器(pod)列表 3.2 查看pod的详细信息 3.3 创建 && 运行 3.4 …...
Redis6为什么引入了多线程?
大家好,我是锋哥。今天分享关于【Redis6为什么引入了多线程?】面试题。希望对大家有帮助; Redis6为什么引入了多线程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 6 引入了多线程的主要目的是提高性能&#…...
KMP 2024 年总结,Kotlin 崛起的一年
2024 Google I/O 上正式官宣了 KMP(Kotlin Multiplatform)项目,它是 Google Workspace 团队的一项长期「投资」项目,由 JetBrains 开发维护和开源的项目,简单来说,JetBrains 主导,Google Worksp…...
leecode188.买卖股票的最佳时机IV
这道题目我在买卖股票III就已经得出规律了,具体可看买卖股票的最佳时机||| class Solution { public:int maxProfit(int k, vector<int>& prices) {int nprices.size();vector<vector<int>> dp(n,vector<int>(2*k1,0));for(int j1;j&l…...
分布式消息队列RocketMQ
一、RocketMQ概述 1.1 MQ 概述 MQ,Message Queue,是一种提供消息队列服务的中间件,也成为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据 1.2 MQ 用途 MQ的用途总结起来可分为以下三点 限流削峰…...
别再只用电容了!从π型RC到电子滤波,手把手教你选对硬件滤波方案(附电路图)
硬件滤波方案实战指南:从基础RC到电子滤波的工程决策 在嵌入式系统和电源设计中,噪声抑制是每个工程师必须面对的挑战。想象一下,你精心设计的传感器电路因为电源噪声导致数据跳变,或者音频放大器传出令人不快的嗡嗡声——这些问题…...
OpenClaw备份恢复:千问3.5-35B-A3B-FP8配置迁移指南
OpenClaw备份恢复:千问3.5-35B-A3B-FP8配置迁移指南 1. 为什么需要备份OpenClaw配置 上周我的开发机突然硬盘故障,不得不重装系统。当我准备重新部署OpenClaw时,突然意识到一个严重问题——过去三个月精心调试的千问3.5模型配置、飞书机器人…...
DSP题目:FFT算法的Matlab实现及其应用研究
DSP 题目:FFT算法的Matlab实现及应用研究最近帮室友调毕设的信号处理部分,他拿了个麦克风录的杂音,想把背景的50Hz工频噪音去掉,上来就问我“为啥我fft出来的峰不对”——害,这问题我刚学DSP的时候也踩过无数坑&#x…...
Adafruit NeoMatrix 原理与坐标映射详解
1. 项目概述 Adafruit NeoMatrix 是一款专为 NeoPixel 矩阵与网格显示设备设计的嵌入式图形库,其核心定位是作为 Adafruit_GFX 图形抽象层的硬件适配实现。它并非独立渲染引擎,而是通过继承并扩展 Adafruit_GFX 的绘图接口(如 drawPixel() …...
从零到一:在Trae平台构建网页数据智能抓取与分析引擎
1. 为什么你需要一个网页数据智能抓取引擎? 每次看到同事手动复制网页数据到Excel,我都忍不住想递杯咖啡——这活儿太费时了!去年我帮市场部做竞品分析,发现他们每周要花8小时手工整理20个电商平台的价格数据。直到我们用Trae平台…...
自适应陷波器的FPGA实现 作用:消除特定频率的干扰信号 包含quartus源码与models...
自适应陷波器的FPGA实现 作用:消除特定频率的干扰信号 包含quartus源码与modelsim仿真自适应陷波器 FPGA 实现 —— 从算法到硬件的完整技术解码一、引言在通信、雷达、音频以及工业测控等场景中,窄带干扰往往比宽带噪声更难处理:它能量集中、时变性强&…...
LibreCAD:完全免费的2D CAD软件终极指南,告别昂贵许可证
LibreCAD:完全免费的2D CAD软件终极指南,告别昂贵许可证 【免费下载链接】LibreCAD LibreCAD is a cross-platform 2D CAD program written in C17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse…...
Ostrakon-VL 模型推理加速实战:使用 .accelerate 库优化扫描速度
Ostrakon-VL 模型推理加速实战:使用 .accelerate 库优化扫描速度 1. 效果惊艳的开场 最近在测试Ostrakon-VL模型时,我发现了一个令人惊喜的事实:通过.accelerate库的几项简单优化,模型推理速度可以提升3倍以上,同时显…...
seo规则中的内容创作有哪些注意事项
SEO规则中的内容创作有哪些注意事项 在当今互联网时代,搜索引擎优化(SEO)已成为网站流量和曝光度提升的关键手段。其中,内容创作是SEO的核心要素之一。仅仅创作大量内容并不能保证网站的高排名和高流量。要想在百度等搜索引擎上取…...
英雄联盟智能工具League Akari:从效率提升到战术优化的全方位解决方案
英雄联盟智能工具League Akari:从效率提升到战术优化的全方位解决方案 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在英…...
