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的用途总结起来可分为以下三点 限流削峰…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
