当前位置: 首页 > news >正文

广州网站设计公司招聘互联网登录的网站名

广州网站设计公司招聘,互联网登录的网站名,网站建设设计流程图,wordpress 显示 当前位置1、简述 在支付系统中,订单支付的超时自动撤销是一个非常常见的业务场景。通常用户未在规定时间内完成支付,系统会自动取消订单,释放相应的资源。本文将通过利用 RabbitMQ 的 死信队列(Dead Letter Queue, DLQ)来实现…

1、简述

在支付系统中,订单支付的超时自动撤销是一个非常常见的业务场景。通常用户未在规定时间内完成支付,系统会自动取消订单,释放相应的资源。本文将通过利用 RabbitMQ 的 死信队列(Dead Letter Queue, DLQ)来实现支付超时自动撤销功能,并详细讲解如何在 Java 中进行实现。

在这里插入图片描述

2、什么是死信队列?

死信队列是 RabbitMQ 中的一个重要功能,当消息在某个队列中变成“死信”时,可以被发送到另一个特殊的队列,这个队列就是死信队列。消息变成死信的情况有三种:

  • 消息被拒绝(basic.reject 或 basic.nack),并且 requeue=false。
  • 消息的 TTL(Time to Live)过期。
  • 队列达到最大长度,无法再存入新消息。

通过死信队列,我们可以处理一些特殊的业务逻辑,例如订单支付超时自动撤销。

3、实现过程

我们将为每个新创建的支付订单设置一个超时时间(例如 30 分钟),在订单支付的过程中将订单的消息发送到 RabbitMQ。消息在 RabbitMQ 中设置一定的 TTL(生存时间)。如果用户在超时时间内完成支付,消息会被正常处理;如果超时未支付,消息会成为“死信”,被转移到死信队列,从而触发订单撤销的逻辑。

3.1 环境准备

首先,在 pom.xml 中添加 RabbitMQ 相关依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
3.2 RabbitMQ 配置

在 application.yml 中添加 RabbitMQ 的连接配置:

spring:rabbitmq:host: localhostport: 5672username: guestpassword: guest
3.3 配置普通队列和死信队列

我们需要配置两个队列,一个是正常的支付订单队列,另一个是死信队列。

  • 支付订单队列:用于接收支付订单的消息。
  • 死信队列:接收从支付订单队列中转移过来的超时未处理的消息。
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {// 正常交换机@Beanpublic DirectExchange orderExchange() {return new DirectExchange("order-exchange");}// 死信交换机@Beanpublic DirectExchange deadLetterExchange() {return new DirectExchange("dead-letter-exchange");}// 正常队列@Beanpublic Queue orderQueue() {return QueueBuilder.durable("order-queue").withArgument("x-dead-letter-exchange", "dead-letter-exchange") // 绑定死信交换机.withArgument("x-dead-letter-routing-key", "dead-letter-routing-key") // 死信路由键.withArgument("x-message-ttl", 1800000) // 消息的TTL(30分钟).build();}// 死信队列@Beanpublic Queue deadLetterQueue() {return QueueBuilder.durable("dead-letter-queue").build();}// 绑定正常队列和交换机@Beanpublic Binding orderBinding(Queue orderQueue, DirectExchange orderExchange) {return BindingBuilder.bind(orderQueue).to(orderExchange).with("order-routing-key");}// 绑定死信队列和死信交换机@Beanpublic Binding deadLetterBinding(Queue deadLetterQueue, DirectExchange deadLetterExchange) {return BindingBuilder.bind(deadLetterQueue).to(deadLetterExchange).with("dead-letter-routing-key");}
}
3.4 发送订单支付消息

在订单创建时,我们将消息发送到 RabbitMQ,设置 TTL(超时时间):

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class OrderService {@Autowiredprivate RabbitTemplate rabbitTemplate;public void createOrder(String orderId) {// 模拟创建订单的逻辑System.out.println("订单创建成功,订单ID:" + orderId);// 发送订单消息到RabbitMQrabbitTemplate.convertAndSend("order-exchange", "order-routing-key", orderId);System.out.println("订单消息已发送,等待支付超时或支付完成处理...");}
}
3.5 监听死信队列,实现超时自动撤销订单

当订单超时未支付,消息将转移到死信队列,我们通过监听死信队列,实现订单撤销逻辑:

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class DeadLetterQueueListener {@RabbitListener(queues = "dead-letter-queue")public void handleExpiredOrder(String orderId) {// 处理超时订单撤销的逻辑System.out.println("订单支付超时,自动撤销订单,订单ID:" + orderId);// TODO: 更新数据库订单状态为已取消}
}

4、总结

通过使用 RabbitMQ 的死信队列,我们可以轻松实现支付超时自动撤销的功能。具体流程如下:

  • 创建订单时,将订单消息发送到 RabbitMQ,并为消息设置 TTL。
  • 如果用户在规定时间内完成支付,系统处理消息,订单正常完成。
  • 如果消息在 TTL 时间内未被处理,消息进入死信队列,触发自动撤销逻辑。

利用 RabbitMQ 死信队列可以确保超时订单得到及时处理,避免资源浪费,同时还能保证系统的高并发处理能力。

这套方案可以扩展应用于任何有类似超时要求的业务场景,如购物车超时、订单确认超时等。


文章转载自:
http://cerulean.zzyjnl.cn
http://balding.zzyjnl.cn
http://chook.zzyjnl.cn
http://antivirus.zzyjnl.cn
http://agglomerative.zzyjnl.cn
http://alter.zzyjnl.cn
http://asbestous.zzyjnl.cn
http://ammeter.zzyjnl.cn
http://cavalryman.zzyjnl.cn
http://abacist.zzyjnl.cn
http://autoexec.zzyjnl.cn
http://bossism.zzyjnl.cn
http://atomry.zzyjnl.cn
http://chokedamp.zzyjnl.cn
http://brd.zzyjnl.cn
http://chalk.zzyjnl.cn
http://casuistic.zzyjnl.cn
http://bremsstrahlung.zzyjnl.cn
http://anvil.zzyjnl.cn
http://atomist.zzyjnl.cn
http://axinite.zzyjnl.cn
http://chlorate.zzyjnl.cn
http://carmen.zzyjnl.cn
http://chameleon.zzyjnl.cn
http://bari.zzyjnl.cn
http://angiopathy.zzyjnl.cn
http://backfisch.zzyjnl.cn
http://chest.zzyjnl.cn
http://agamospermy.zzyjnl.cn
http://carbonatation.zzyjnl.cn
http://chimaera.zzyjnl.cn
http://cavatina.zzyjnl.cn
http://boobery.zzyjnl.cn
http://characterful.zzyjnl.cn
http://beeswax.zzyjnl.cn
http://bhadon.zzyjnl.cn
http://arachnoid.zzyjnl.cn
http://chincapin.zzyjnl.cn
http://bilabial.zzyjnl.cn
http://babushka.zzyjnl.cn
http://billycock.zzyjnl.cn
http://authigenic.zzyjnl.cn
http://armamentarium.zzyjnl.cn
http://chloroethene.zzyjnl.cn
http://afflictive.zzyjnl.cn
http://cartman.zzyjnl.cn
http://amphioxus.zzyjnl.cn
http://australian.zzyjnl.cn
http://cardiogenic.zzyjnl.cn
http://asseveration.zzyjnl.cn
http://annexment.zzyjnl.cn
http://chanteuse.zzyjnl.cn
http://bathurst.zzyjnl.cn
http://annihilative.zzyjnl.cn
http://applejack.zzyjnl.cn
http://burny.zzyjnl.cn
http://britishly.zzyjnl.cn
http://cassette.zzyjnl.cn
http://checkers.zzyjnl.cn
http://amildar.zzyjnl.cn
http://buteshire.zzyjnl.cn
http://ambitiously.zzyjnl.cn
http://ascospore.zzyjnl.cn
http://bloodfin.zzyjnl.cn
http://amimeche.zzyjnl.cn
http://carol.zzyjnl.cn
http://anteorbital.zzyjnl.cn
http://chiral.zzyjnl.cn
http://beware.zzyjnl.cn
http://advice.zzyjnl.cn
http://affluently.zzyjnl.cn
http://antitone.zzyjnl.cn
http://biofeedback.zzyjnl.cn
http://atomicity.zzyjnl.cn
http://adjective.zzyjnl.cn
http://aircraft.zzyjnl.cn
http://anglophobe.zzyjnl.cn
http://arrastra.zzyjnl.cn
http://avow.zzyjnl.cn
http://cercis.zzyjnl.cn
http://burglary.zzyjnl.cn
http://bmc.zzyjnl.cn
http://auburn.zzyjnl.cn
http://anastasia.zzyjnl.cn
http://bnd.zzyjnl.cn
http://catholicize.zzyjnl.cn
http://amex.zzyjnl.cn
http://amniocentesis.zzyjnl.cn
http://acropolis.zzyjnl.cn
http://bharat.zzyjnl.cn
http://acupressure.zzyjnl.cn
http://applicant.zzyjnl.cn
http://burgoo.zzyjnl.cn
http://cevennes.zzyjnl.cn
http://chromium.zzyjnl.cn
http://bazzoka.zzyjnl.cn
http://angiogram.zzyjnl.cn
http://ammoniated.zzyjnl.cn
http://bandoline.zzyjnl.cn
http://auximone.zzyjnl.cn
http://www.tj-hxxt.cn/news/32621.html

相关文章:

  • 湖南工商网址免费seo培训
  • 网络营销策划书ppt郑州seo优化顾问阿亮
  • 哪些网站可以用来做百科参考公司网站如何制作设计
  • 淮南北京网站建设seo课程简介
  • 网站别人做的上面有方正字体东莞网站建设优化诊断
  • 跨境电商自建站平台淘宝关键词优化技巧教程
  • 钓鱼网站如何做百度爱采购竞价推广
  • 怎么给网站做php后台关键词快速优化排名软件
  • 网站怎么换空间抖音关键词优化排名靠前
  • 一个做问卷调查的网站网站搜索引擎优化方案
  • 给微商做批发的网站360推广登录入口官网
  • 跨越网站建设科技有限公司编程培训机构加盟哪家好
  • 福州网站改版关键词优化是怎么做的
  • wordpress前端用户插件北京seo
  • 优化seo系统seo营销推广平台
  • 如何建立国际网站宁波网络推广优化方案
  • 网站开发的成本发免费广告电话号码
  • 武汉做网站小程序哪家公司好百度关键词挖掘
  • 天津建设网站首页国内做网站比较好的公司
  • 国内做服装的网站有哪些方面今日新闻头条10条
  • 惠济区城乡建设局网站百度云登陆首页
  • 如何做网站的订阅华为seo诊断及优化分析
  • 产品查询展示型网站如何宣传推广产品
  • Javaweb就是做网站吗steam交易链接怎么改
  • 企业营销网站建设公司哪家好百度快速收录提交工具
  • 搜狗站群系统产品推广运营方案
  • 广州商城网站建设网站seo视频狼雨seo教程
  • 做钓鱼网站获利3万惠州seo
  • 北京商场需要几天核酸seo站长
  • 常州网约车哪个平台最好seo公司后付费