[Java]订单超时自动取消——RocketMQ实现+SpringBoot项目

news/2024/9/12 18:39:47/

文章目录

  • 一、背景
  • 二、环境准备
  • 三、项目使用
      • 1、业务需求:
      • 2、实现原理
      • 3、代码实现
          • 3.1、生产端——消息发送
          • 3.2、消费端——延迟消息监听
  • 四、保证消息消费成功


一、背景

避免用户未付款订单占用库存资源


二、环境准备

  1. 下载安装RocketMQ
  2. SpringBoot整合RocketMQ——rocketmq-spring-boot-starter

三、项目使用

1、业务需求:

订单超时30分钟,取消订单。

2、实现原理

利用RocketMQ的延迟消息实现。

 rocketMQTemplate.syncSend(主题, 消息, 超时时间, 延迟等级);

RocketMQ默认提供了18个延迟等级,延迟30分钟是等级16。

延迟等级0123456789101112131415161718
延迟时间01s5s10s30s1m2m3m4m5m6m7m8m9m10m20m30m1h2h

3、代码实现

3.1、生产端——消息发送
@Service
public class Server {private RocketMQTemplate rocketMQTemplate;public Server(RocketMQTemplate rocketMQTemplate) {this.rocketMQTemplate = rocketMQTemplate;}/***发送延迟订单消息**/public void sendDelayOrderMsg(String msg) {Message<String> msgBody = MessageBuilder.withPayload(msg).build();rocketMQTemplate.syncSend("delay_order", msgBody , 2000, 16);}
}
3.2、消费端——延迟消息监听
@Component
@RocketMQMessageListener(topic = "delay_order",consumerGroup = "order-consumer", selectorExpression = "*")
public class OrderListner implements RocketMQListener<String> {@Overridepublic void onMessage(String msg) {System.out.println("接收到的延迟消息:"+msg);//todo 自定义义务处理。//逻辑删除该订单数据}
}

四、保证消息消费成功

rocketmq-spring-boot-starter在监听消息就实现了自动提交ack
RocketMQListener的onMessage方法不抛异常都会自动提交ack。
抛出异常则进行重试。


http://www.ppmy.cn/news/1164700.html

相关文章

R语言:ca和MASS包实现对应分析并绘图解释

文章目录 对应分析R语言求解案例ca包codeMASScode对应分析的问题对应分析 对应分析(correspondence analysis)是用于寻求列联表的行和列之间联系的一种低维图形表示法,它可以从直觉上揭示出同一分类变量的各个类别之间的差异,以及不同分类变量各个类别之间的对应关系。对应…

数据库设计阶段-架构真题(五十七)

下面关于联合需求计划JRP叙述&#xff0c;不正确的是&#xff08;&#xff09;。 JRP是一种相对成本较高但十分有效的需求获取方法在讨论期间尽量避免使用专业术语JRP的主要目的是对需求进行分析和验证在JRP实施之前&#xff0c;应制定详细的议程&#xff0c;并严格遵照议程进…

ChatGPT AIGC自动生成多条件复杂计算函数

在Excel中经常会遇到多条件判断,根据不同的条件与内容显示不同的值。 例如: 需要给每个员工根据入职年限,员工等级,满意度等维度给员工发年终奖。 这在职场办公过程中经常要面临的一个问题。如销售额达到多少,取多少提成,如学生成绩在什么区间是设置为优秀还是良好等一…

MMKV(3)

使用时遇到的问题 在项目的构建配置文件&#xff08;如 Gradle 或 Maven&#xff09;中添加相应的依赖项。 MMKV 是一个键值存储库&#xff0c;它存储的是原始的字节数组数据。需要存储和检索复杂的对象或数据结构&#xff0c;需要自行进行序列化和反序列化操作。可以使用任何…

Qt中绘图框架介绍

绘图框架类 父窗口继承1继承2QGraphicsSceneQGraphicsViewQGraphicsItemQAbstractGraphicsShapeItemQGraphicsEllipseItemQGraphicsPathItemQGraphicsPolygonItemQGraphicsRectItemQGraphicsSimpleTextItemQGraphicsItemGroupQGraphicsLineItemQGraphicsObjectQGraphicsSvgIte…

H3C的IRF堆叠互联关系说明

H3C IRF堆叠互联说明48口交换机连接方式IRF Port 两台设备第一台的51口 第二台的51口irf-port 1/2 port group interface ten-gigabitethernet 1/0/51 port group interface ten-gigabitethernet 1/0/52第一台的52口第二台的52口irf-port 2/1 port group interface ten-gigabi…

异步加载JS的方法

异步加载 JavaScript (JS) 文件是提高网页性能的一种常用技术&#xff0c;这样可以使页面在等待 JS 文件加载和执行时不会阻塞。以下是一些异步加载 JS 的方法&#xff1a; 使用 <script> 标签的 async 属性 通过将 <script> 标签的 async 属性设为 true&#xf…

Docker容器技术实战1

1、docker容器 docker相当于传统的货运集装箱 虚拟机&#xff08;Virtual Machine&#xff0c;VM&#xff09;是一个完整的虚拟操作系统和硬件环境。它的工作原理是通过在一台物理主机上使用虚拟化软件来创建多个虚拟机实例&#xff0c;每个实例都可以运行独立的操作系统和应用…

攻防世界web篇-unserialize3

得出php代码残篇 将代码补全后再在线php运行工具中进行运行 在浏览器输入后得到下面的界面 这里需要将O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;} 改为 O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}

UE5 ChaosVehicles载具 实现大漂移 (连载四)

载具设置成前驱模式 前轮摩擦力倍增x5 后轮摩擦力倍增x0.5

决策树oo

决策树学习的算法通常是一个递归地选择最优特征(选择方法的不同&#xff0c;对应着不同的算法)&#xff0c;并根据该特征对训练数据进行分割&#xff0c;使得各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分&#xff0c;也对应着决策树的构建 步骤&#…

Flink中的时间和窗口操作

1.窗口概念 在大多数场景下,我们需要统计的数据流都是无界的,因此我们无法等待整个数据流终止后才进行统计。通常情况下,我们只需要对某个时间范围或者数量范围内的数据进行统计分析:如每隔五分钟统计一次过去一小时内所有商品的点击量;或者每发生1000次点击后,都去统计一…

rabbitmq发送json格式 utf8编码数据

参考文章&#xff1a;Spring-Cloud RabbitMQ 用法 - 发送json对象 - 简书 生产者&#xff1a; 消费者&#xff1a;

学信息系统项目管理师第4版系列32_信息技术发展

1. 大型信息系统 1.1. 大型信息系统是指以信息技术和通信技术为支撑&#xff0c;规模庞大&#xff0c;分布广阔&#xff0c;采用多级 网络结构&#xff0c;跨越多个安全域&#xff1b;处理海量的&#xff0c;复杂且形式多样的数据&#xff0c;提供多种类型应用 的大系统 1.1.…

C# Onnx Yolov8 Detect 戴口罩检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

在 Visual Studio Code (VS Code) 中设置

在 Visual Studio Code (VS Code) 中设置代理服务器的详细教程如下&#xff1a; 打开 Visual Studio Code。 在顶部菜单栏中&#xff0c;点击 "File"&#xff08;文件&#xff09; > "Preferences"&#xff08;首选项&#xff09; > "Settings…

Spring Boot 3.2四个新特点提升运行性能

随着 Spring Framework 6.1 和 Spring Boot 3.2 普遍可用性的临近&#xff0c;我们想分享一下 Spring 团队为让开发人员优化其应用程序的运行时效率而做出的几项努力的概述。 我们将介绍以下技术和用例&#xff1a; Spring MVC 将使用 基于JDK 21 虚拟线程 Web 堆栈使用 Spri…

详解自定义类型:结构体,位段,枚举,联合

目录 1.结构体 1.1 结构的基础知识 1.2 结构的声明 1.3 特殊的声明 1.4 结构的自引用 1.5 结构体变量的定义和初始化 1.6 结构体内存对齐 1.7 修改默认对齐数 1.8 结构体传参 2. 位段 2.1 什么是位段 2.2 位段的内存分配 2.3 位段的跨平台问题 2.4 位段的应用 3. 枚举…

网络代理技术的护航与网络安全

在数字化时代&#xff0c;网络代理技术日益重要&#xff0c;不仅可维护网络安全&#xff0c;还能促进数据获取。本文深入探讨Socks5代理、IP代理以及它们在网络安全、爬虫、HTTP协议中的应用&#xff0c;助您深刻了解这些技术。 1. Socks5代理&#xff1a;网络安全与多协议支持…

微信小程序设计之主体文件app-json-pages

一、新建一个项目 首先&#xff0c;下载微信小程序开发工具&#xff0c;具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后&#xff0c;注册小程序账号&#xff0c;具体注册方法&#xff0c;可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…