基于RabbitMQ订单未支付30分钟自动取消

文章目录

          • 一、原理实现
            • 1. 超时消费流程图
            • 2. 死信队列的架构原理
            • 3. 订单超时30分钟实现原理
          • 二、核心代码实战
            • 2.1. 记录订单待支付数据
            • 2.2. 超时消费者监听
            • 2.3. 订单核对校验

一、原理实现
1. 超时消费流程图

在这里插入图片描述

2. 死信队列的架构原理

相同点:
死信队列和普通队列区别不是很大
普通队列与死信队列都有自己的独立的交换机和路由key、队列和消费者。

不同点:
1.生产者投递消息先投递到我们普通交换机中,普通交换机再将该消息根据路由规则将消息路由到普通队列缓存起来,普通队列对应有自己独立的普通消费者。
2.如果生产者投递消息到普通队列中,普通队列发现该消息一致没有被消费者消费的情况下(设置过期时间),在这时候或将该消息转移到死信(备胎)交换机中,死信(备胎)交换机对应有自己独立的死信(备胎)队里,而死信(备胎)队列有对应的死信(备胎)消费者。

3. 订单超时30分钟实现原理

1.用户下单之后,投递一个msg消息存放在msg服务器daunt,该消息msg消息过期时间为30分钟,一致未被订单消费者消费,消息会转移到死信交换机路由到死信队列中,被我们的死信消费者30分钟后消息。
2.死信消费者在根据订单号码查询支付订单状态,如果是未支付情况下,则将该订单设置未超时。
对筛选出来的订单号码进行核对校验

  • 1.订单中是否存在
  • 2>携带订单号码调用支付宝查询订单支付状态是否为待支付
  • 3>更新该订单号码状态
二、核心代码实战
2.1. 记录订单待支付数据
 /*** 订单会调用改接口提前将用户下单的金额、订单号码 传递到支付 提前存储到支付信息表中状态为待支付状态** @param payOrderTokenDto* @return*/@Overridepublic BaseResponse<String> toPayResultToken(PayOrderTokenDto payOrderTokenDto) {//1.验证参数代码略//2.将该数据插入到支付信息表中PaymentInfoEntity paymentChannelEntity = dtoToDo(payOrderTokenDto, PaymentInfoEntity.class);int result = paymentInfoMapper.insert(paymentChannelEntity);if (result <= 0) {return setResultError("插入支付记录失败!");}// 生成token令牌Long id = paymentChannelEntity.getId();//3.生成支付token令牌给vueString payToken = tokenUtils.createToken(id + "");// 向mq投递一条msg消息 设置过期时间 30分钟orderTimeoutManage.sendOrderTimeoutMsg(id + "");return setResultSuccess(payToken);}
2.2. 超时消费者监听
@Component
public class PayOrderTimeoutConsumer {@Autowiredprivate PayOrderTimeoutService payOrderTimeoutService;/*** 死信队列监听队列回调的方法** @param msg*/@RabbitListener(queues = "mayikt_order_dlx_queue")public void orderConsumer(String msg) {Long payId = Long.parseLong(msg);payOrderTimeoutService.orderTimeout(payId);}
}
2.3. 订单核对校验
@Service
public class PayOrderTimeoutService {@Autowiredprivate PaymentInfoMapper paymentInfoMapper;public boolean orderTimeout(Long payId) {// 消费者获取 支付的id  消费者如何消费 批量获取msg、多个消费者 、查询db   查询n个未支付状态id// 1.根据该支付id 查询支付订单信息 状态   异步回调中如果用户支付成功了,从rabbitmq 将该消息删除 清理过期keyPaymentInfoEntity paymentInfoEntity = paymentInfoMapper.selectById(payId);if (paymentInfoEntity == null) {return false;}// 2.如果支付状态是为未支付的话,则将该状态该已超时if (!PaymentConstant.PAYMENT_STATUS_NOT.equals(paymentInfoEntity.getPaymentStatus())) {return false;}// 3. 主动调用下  支付宝接口 根据 订单状态查询 支付宝这边是否已经支付了---31 32分钟 调用支付宝接口查询// 用户跳转到支付页面支付超时30分钟// 3.调用库存接口 增加库存(33)  修改该状态为超时paymentInfoEntity.setPaymentStatus(PaymentConstant.PAYMENT_STATUS_TIMEOUT);paymentInfoMapper.updateById(paymentInfoEntity);// 调用库存接口 新增库存return true;}
}

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

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

相关文章

蚂蚁mPaaS:有人修建高楼,有人重构城市

简介&#xff1a; 纵览这时代的先声&#xff0c;在高楼之巅&#xff0c;在海天之外。 2018年2月&#xff0c;春运拉开序幕。 这是人类史上最大规模的迁徙活动&#xff0c;3.82亿人坐进车厢&#xff0c;被31万趟车次送往不同的目的地。如果有一台摄影机从高空对准中国大地&…

全场景闪存加速、全场景数据保护,华为助力医院实现智能化转型

数字经济时代的来临&#xff0c;是影响当今医疗健康服务领域最重要的大趋势。在这种大背景下&#xff0c;新时期的智能医疗必将在医疗行业内掀起一阵浪潮。2020年&#xff0c;新冠疫情的肆虐势必推进浪潮的提前到来。 首都医科大学附属北京同仁医院&#xff0c;始建于1886年&a…

从Cloudflare事件,看DNS服务的重要性

简介&#xff1a; 美国时间7月17日&#xff0c;美国知名的网络安全服务提供商Cloudflare&#xff0c;出现了突发网络服务故障。通过这个事件&#xff0c;和大家聊聊关于网络安全稳定的思考&#xff0c;以及稳定、安全的DNS服务的重要性。 7.17事件 美国时间7月17日下午&#…

基于Redis订单未支付30分钟自动取消

文章目录一、原理实现1. 超时消费流程图2. 订单超时30分钟实现原理二、核心代码实战2.1. 记录订单待支付数据2.2. redis配置2.3. 超时消费者监听一、原理实现 1. 超时消费流程图 2. 订单超时30分钟实现原理 ①用户下单之后&#xff0c;投递一个订单号码存放到redis服务端&…

面向 K8s 设计误区

作者 | 姬望来源 | 阿里巴巴中间件头图 | 下载于视觉中国K8s 设计模式Kubernetes 是一个具有普遍意义的容器编排工具&#xff0c;它提供了一套基于容器构建分布式系统的基础依赖&#xff0c;其意义等同于 Linux 在操作系统中的地位&#xff0c;可以认为是分布式的操作系统。自定…

安装docker-compose插件

文章目录一、安装docker-compose插件1. 下载docker-compose插件2. 赋予权限3. 验证一、安装docker-compose插件 1. 下载docker-compose插件 curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/…

突围数字化转型,让特步同比增长24.8%的全渠道中台

简介&#xff1a; 多年前&#xff0c;曾有媒体向丁水波提问&#xff1a;“对于你个人来说&#xff0c;转型过程中最痛苦的部分是什么&#xff1f;”“最关键的是市场意识的转变。耳听为虚眼见为实&#xff0c;做起来给外界看到了&#xff0c;他们才会明白和接受。很多东西得做完…

赠书 | 什么是 Knative?

作者 | 李志伟、游杨来源 | 华章计算机头图 | 下载于视觉中国✎ 导读 什么是Knative&#xff1f;本文将对Knative的产生背景及发展历程&#xff0c;架构设计&#xff0c;受众群体等做详细介绍。Knative是由谷歌发起&#xff0c;有Pivotal、IBM、Red Hat等公司共同参与开发的Ser…

canal kafka 实现mysql与es/redis 数据同步

文章目录一、原理实现1. 方案设计流程图2. 实现原理二、mysql开启binlog模式2.1. 配置my.ini2.2. 重启mysql服务2.3. 验证binlog模式2.4. 创建canal账号2.5. 账号验证三、docker-compose环境搭建3.1. 环境总览3.2. 编写docker-compose.yml3.3. 安装docker-compose3.4. 构建环境…

免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式

简介&#xff1a; 今天&#xff0c;阿里技术公布一波阿里P8、P9技术大牛的思维模型&#xff0c;将他们的思维模式呈现出来。你可以在阿里资深专家职业生涯的真切感悟中&#xff0c;找到应对危机的最佳方法。《阿里工程师的自我修养》现已正式公开&#xff0c;可免费下载阅读。 …

云原生时代消息中间件的演进路线

简介&#xff1a; 本文整理自作者于 2020 年云原生微服务大会上的分享《云原生时代的消息中间件演进》&#xff0c;主要探讨了传统的消息中间件如何持续进化为云原生的消息服务。 作者 | 周礼&#xff08;不铭&#xff09; 阿里巴巴集团消息中间件架构师 导读&#xff1a;本文…

四大“化学融合”、两大核心平台能力,华为首次系统解读OneStorage

4月14日&#xff0c;在2021华为全球分析师大会期间&#xff0c;华为举办数据存储专场Session&#xff0c;面向全球分析师全面解读下一代数据存储解决方案OneStorage&#xff0c;引领数据存储产业迈向全场景智能和多云融合。同时&#xff0c;在此期间华为首次向业界系统性地诠释…

科普|不同协议下远程服务器文件上传_下载优劣对比

简介&#xff1a; 作为一个程序员&#xff0c;如果不知道如何进行远程服务器的文件上传与下载&#xff0c;实在是一件尴尬的事情&#xff0c;今天我们聊聊如何实现远程服务器的文件上传与下载。 作为一个程序员&#xff0c;如果不知道如何进行远程服务器的文件上传与下载&#…

Module build failed: Error: Cannot find module ‘gifsicle‘

问题描述&#xff1a; build Cannot find module ‘gifsicle’ 解决方案&#xff1a; 第一步&#xff1a;卸载image-webpack-loader 第1种方式&#xff1a;删除项目中的image-webpack-loader npm uninstall image-webpack-loader第2种方式&#xff1a;删除node_modules中的im…

高德AR驾车导航解决方案

简介&#xff1a; 高德从2018年首创了车载AR导航后&#xff0c;已经先后在后视镜、智能车盒、前装整车厂、后装车机产品、行车记录仪等众多场景落地应用&#xff0c;搭建了非常完整的AR导航生态。 日前&#xff0c;高德地图最新发布了v10.60新版本&#xff0c;上线了手机端的A…

第 11 个“世界备份日”刚过,《Veeam 2021 数据保护报告》为你解读全球数据备份现状

2011 年 3 月 31 日&#xff0c;美国网络社区 Reddit 发起“世界备份日&#xff08;World Backup Day&#xff09;”倡议活动&#xff0c;号召人们做好数据安全备份。于是每年愚人节前一天成为“世界备份日”&#xff0c;口号很有趣 Don’t Be An April Fool,Backup Your Data&…

知乎李大海对话阿里云贾扬清:透视AI应用难题与未来趋势

自AlphaGo接连战胜李世石与柯洁后&#xff0c;越来越多从业者将AI看做科技行业的未来。大大小小的AI公司兴起&#xff0c;国内外巨头公司纷纷加速向AI转型。但经历祛魅后的AI&#xff0c;在过去几年间却并未获得观察者们预想的火箭式爆发。 “AI行业接下来可能有哪些发展&…

当 Kubernetes 遇到机密计算,阿里巴巴如何保护容器内数据的安全?

简介&#xff1a; 8 月 26 日&#xff0c;我们发起了第 6 期 SIG Cloud-Provider-Alibaba 网研会直播。本次直播主要介绍了机密计算的概况&#xff0c; InclavareContainers 开源项目架构、已支持的功能和迭代计划&#xff0c;以及阿里云 ACK-TEE 的发展现状和规划。本文汇集了…

人脸核身基础版 SDK 接入 > 合作方后台上送身份信息

文章目录一、概述二、实现流程2.1. 获取获取 access_token2.2. 获取 SIGN ticket2.3. 生成签名2.4. 上送身份信息2.5. 获取 NONCE ticket三、实战3.1. 获取获取 access_token3.2. 获取 SIGN ticket3.3. 生成签名3.4. 上送身份信息3.5. 获取 NONCE ticket四、开源地址一、概述 …

5G、射频、奥特曼,这仨有联系吗?

作者 | 小枣君来源 | 鲜枣课堂头图 | 下载于ICphoto手机&#xff0c;作为移动互联网时代的标配&#xff0c;已经走进了我们每个人的生活。有了它&#xff0c;我们可以随心所欲地聊天、购物、追剧&#xff0c;享受美好的人生。正因为手机如此重要&#xff0c;所以人们对相关技术…