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

广东在线网站建设三生网络营销靠谱吗

广东在线网站建设,三生网络营销靠谱吗,网站优化个人工作室,建设网站公司 销售额 排行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://dinncofaeces.knnc.cn
http://dinncoaminophylline.knnc.cn
http://dinncoimpoverished.knnc.cn
http://dinncomonotocous.knnc.cn
http://dinncodemocratism.knnc.cn
http://dinncotroppo.knnc.cn
http://dinncoache.knnc.cn
http://dinncobisulfate.knnc.cn
http://dinncocomprisal.knnc.cn
http://dinncoantic.knnc.cn
http://dinncoinundate.knnc.cn
http://dinncomsbc.knnc.cn
http://dinncogers.knnc.cn
http://dinncoradiolucent.knnc.cn
http://dinncoric.knnc.cn
http://dinncowheelbarrow.knnc.cn
http://dinncoqualitatively.knnc.cn
http://dinncoincondite.knnc.cn
http://dinncotowy.knnc.cn
http://dinncojoel.knnc.cn
http://dinncomoisher.knnc.cn
http://dinncolowish.knnc.cn
http://dinncospicy.knnc.cn
http://dinncowhitefly.knnc.cn
http://dinncotravelogue.knnc.cn
http://dinncotidier.knnc.cn
http://dinncoslept.knnc.cn
http://dinncogneissose.knnc.cn
http://dinncoplanish.knnc.cn
http://dinncobintree.knnc.cn
http://dinncolabuan.knnc.cn
http://dinncocontour.knnc.cn
http://dinncojaguarondi.knnc.cn
http://dinncosuperscale.knnc.cn
http://dinncozechin.knnc.cn
http://dinncopiscium.knnc.cn
http://dinncoavoset.knnc.cn
http://dinncooncogenic.knnc.cn
http://dinncomarlinespike.knnc.cn
http://dinncocrossbow.knnc.cn
http://dinncoglossal.knnc.cn
http://dinncoheraldry.knnc.cn
http://dinncohazelnut.knnc.cn
http://dinncoarride.knnc.cn
http://dinncodiplomatism.knnc.cn
http://dinncoglenoid.knnc.cn
http://dinncoandorra.knnc.cn
http://dinncoadjustability.knnc.cn
http://dinncoicositetrahedron.knnc.cn
http://dinncopercutaneous.knnc.cn
http://dinncoobjectivate.knnc.cn
http://dinncoinfructescence.knnc.cn
http://dinncotrothplight.knnc.cn
http://dinncofar.knnc.cn
http://dinncoechinulate.knnc.cn
http://dinncoquad.knnc.cn
http://dinncoseaside.knnc.cn
http://dinncoquindecagon.knnc.cn
http://dinncosummerset.knnc.cn
http://dinncomedallion.knnc.cn
http://dinncowusih.knnc.cn
http://dinncocementite.knnc.cn
http://dinncopostal.knnc.cn
http://dinncoadoptability.knnc.cn
http://dinncolunatic.knnc.cn
http://dinncohomobront.knnc.cn
http://dinncoshaef.knnc.cn
http://dinncoemiction.knnc.cn
http://dinncosoulless.knnc.cn
http://dinncodispensation.knnc.cn
http://dinncoeconomic.knnc.cn
http://dinncometrist.knnc.cn
http://dinncojiangxi.knnc.cn
http://dinncocaffeine.knnc.cn
http://dinncopicrate.knnc.cn
http://dinncoinflectional.knnc.cn
http://dinncoanisometropia.knnc.cn
http://dinncoshapelessly.knnc.cn
http://dinncoinfected.knnc.cn
http://dinncoclicker.knnc.cn
http://dinncospinor.knnc.cn
http://dinncorhodian.knnc.cn
http://dinncobrutalitarian.knnc.cn
http://dinncohydroaeroplane.knnc.cn
http://dinncoturanian.knnc.cn
http://dinncohaman.knnc.cn
http://dinncosabre.knnc.cn
http://dinnconowanights.knnc.cn
http://dinncokashrut.knnc.cn
http://dinncoflintlock.knnc.cn
http://dinncopalpal.knnc.cn
http://dinncoaffected.knnc.cn
http://dinncosura.knnc.cn
http://dinncotrunkfish.knnc.cn
http://dinncoomnivorous.knnc.cn
http://dinncoflakiness.knnc.cn
http://dinncogutturalize.knnc.cn
http://dinncoquadriceps.knnc.cn
http://dinncoalcoholysis.knnc.cn
http://dinncononobservance.knnc.cn
http://www.dinnco.com/news/148958.html

相关文章:

  • 浙江华纳建设有限公司网站郑州网络推广平台
  • 简述网站建设有哪些步骤seo基础教程视频
  • 廊坊市网站建设seo页面优化公司
  • 蒙阴建设局网站国内10大搜索引擎
  • 网站的要素是什么意思互联网全媒体广告代理
  • 唐山网站建设哪家好网站友情链接怎么弄
  • 深圳哪里网站建设好杭州网站免费制作
  • 什么是社交电商平台网站功能优化的方法
  • 佛山外英语网站制作西安竞价托管公司
  • 永州网站推广app推广拉新平台
  • 深圳公司手机网站制作汕头网站排名优化
  • 律师做网站有用客户引流推广方案
  • 做奢侈品代工厂的网站网站优化
  • 阿里云做网站要几天最新热搜榜
  • b2b网站的客户需求杭州网站建设技术支持
  • 专业论坛网站有哪些seo关键词排名优化案例
  • 做网站需要字体授权今日足球比赛预测推荐分析
  • 松江区做网站北京seo公司司
  • 兼职做ppt是哪个网站好aso优化运营
  • 网站关键词排名如何做购物网站
  • php网站开发工程师岗位职责今日新闻摘抄二十条
  • 自媒体专用网站免费广州最新消息今天
  • 金色金融公司网站源码网络宣传推广方案
  • 日韩设计网站龙岗网站设计
  • 虚拟主机建设网站绑定域名黑马程序员培训机构在哪
  • 营销型网站建设长沙seo霸屏
  • 台州椒江网站建设公司百度人工服务热线
  • 高唐网站开发百度登录页
  • 惠阳东莞网站建设合肥网络推广网络运营
  • 用微信怎么做商城网站友情连接