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

泉港区建设局网站廉政wordpress图片自动存储

泉港区建设局网站廉政,wordpress图片自动存储,中文com域名注册,专门做化妆品平台的网站有哪些使用 RabbitMQ 实现秒杀订单系统的异步消息处理 在秒杀系统中#xff0c;如何确保高并发环境下的订单处理稳定高效是个很大的挑战。为了解决这个问题#xff0c;我们通常会引入消息队列#xff0c;通过异步处理来削峰填谷。这篇文章将详细讲解如何使用 RabbitMQ 来设计一个…使用 RabbitMQ 实现秒杀订单系统的异步消息处理 在秒杀系统中如何确保高并发环境下的订单处理稳定高效是个很大的挑战。为了解决这个问题我们通常会引入消息队列通过异步处理来削峰填谷。这篇文章将详细讲解如何使用 RabbitMQ 来设计一个秒杀订单系统的异步消息处理流程重点是如何使用交换机Exchange、队列Queue、路由键Routing Key以及死信队列Dead Letter Queue来管理订单的状态。 1. 为什么需要使用消息队列 在秒杀系统中用户的请求量在极短时间内会成倍增加。如果每个请求都直接访问数据库极有可能导致数据库崩溃甚至出现库存超卖的情况。为了避免这种情况通常会通过引入 RabbitMQ 来将订单处理变为异步先把订单请求写入队列然后由消费者从队列中逐个取出进行处理。这样一来前端响应速度会加快同时也减轻了数据库的压力。 2. 系统设计概述 在这套秒杀系统中我们设计了以下几个关键组件 秒杀订单的主交换机和队列用于处理异步下单请求。成功和失败的订单队列分别处理订单处理成功和失败的消息。死信队列Dead Letter Queue处理超时或者其他异常导致的消息失败。 我们使用了 TopicExchange 来根据路由键将消息发送到不同的队列。每个订单请求在被处理时首先会进入秒杀队列然后根据处理结果被转发到成功或失败的队列。处理成功的订单如果超时未支付会被转发到死信队列进行进一步处理例如取消订单、回滚库存等。 3. 配置 RabbitMQ 下面我们通过配置类 RabbitMQConfig 来详细展示如何定义和绑定 RabbitMQ 的交换机、队列、路由键以及死信队列。 3.1 定义交换机 在 RabbitMQ 中交换机是负责将消息路由到相应队列的组件。我们定义了三个交换机 SECKILL_EXCHANGE用于秒杀队列的交换机负责接收用户的下单请求。SECKILL_EXCHANGE_ORDER用于订单处理的交换机将订单路由到成功或失败的队列。DEAD_LETTER_EXCHANGE_SECKILL_ORDER死信交换机处理那些订单失败或者超时的情况。 Bean public TopicExchange seckillExchange() {return new TopicExchange(SECKILL_EXCHANGE); }Bean public TopicExchange seckillExchangeOrder() {return new TopicExchange(SECKILL_EXCHANGE_ORDER); }Bean public TopicExchange deadLetterExchangeOrder(){return new TopicExchange(DEAD_LETTER_EXCHANGE_SECKILL_ORDER); }通过以上代码我们分别为秒杀订单、成功/失败处理、以及死信处理定义了各自的交换机。 3.2 定义队列 队列是存放消息的地方。我们定义了以下几个队列 SECKILL_QUEUE秒杀队列用户下单请求会被异步地写入这个队列。SECKILL_QUEUE_ORDER_SUCCESS处理成功订单的队列订单处理完成后消息会进入这里。SECKILL_QUEUE_ORDER_FAIL处理失败订单的队列。DEAD_LETTER_QUEUE_SECKILL_ORDER死信队列用于处理超时或者异常未完成的订单。 Bean public Queue seckillQueue() {return new Queue(SECKILL_QUEUE, true); }Bean public Queue seckillQueueOrderSuccess() {return QueueBuilder.durable(SECKILL_QUEUE_ORDER_SUCCESS).withArgument(x-dead-letter-exchange, DEAD_LETTER_EXCHANGE_SECKILL_ORDER).withArgument(x-dead-letter-routing-key, DEAD_LETTER_ROUTINGKEY_SECKILL_ORDER).withArgument(x-message-ttl, 300000) // 消息5分钟过期.build(); }Bean public Queue seckillQueueOrderFail() {return new Queue(SECKILL_QUEUE_ORDER_FAIL, true); }Bean public Queue deadLetterQueueSeckillOrder() {return new Queue(DEAD_LETTER_QUEUE_SECKILL_ORDER, true); }其中seckillQueueOrderSuccess 队列设置了一个 5 分钟的 TTL消息过期时间。如果订单在 5 分钟内未支付消息将被发送到死信队列以便进行进一步处理。 3.3 绑定队列和交换机 RabbitMQ 的消息流转需要通过绑定Binding来实现。绑定将队列和交换机通过路由键连接在一起。我们为每个队列和交换机进行了相应的绑定 // 秒杀队列与秒杀交换机绑定 Bean public Binding seckillBinding(Queue seckillQueue, TopicExchange seckillExchange) {return BindingBuilder.bind(seckillQueue).to(seckillExchange).with(SECKILL_ROUTINGKEY); }// 秒杀成功订单队列和秒杀订单交换机绑定 Bean public Binding seckillOrderSuccessBinding(Queue seckillQueueOrderSuccess, TopicExchange seckillExchangeOrder){return BindingBuilder.bind(seckillQueueOrderSuccess).to(seckillExchangeOrder).with(SECKILL_ROUTINGKEY_ORDER_SUCCESS); }// 秒杀失败订单队列和秒杀订单交换机绑定 Bean public Binding seckillOrderFailBinding(Queue seckillQueueOrderFail, TopicExchange seckillExchangeOrder){return BindingBuilder.bind(seckillQueueOrderFail).to(seckillExchangeOrder).with(SECKILL_ROUTINGKEY_ORDER_FAIL); }// 绑定死信队列到死信交换机 Bean public Binding bindingDeadLetterQueue(Queue deadLetterQueueSeckillOrder, TopicExchange deadLetterExchangeOrder) {return BindingBuilder.bind(deadLetterQueueSeckillOrder).to(deadLetterExchangeOrder).with(DEAD_LETTER_ROUTINGKEY_SECKILL_ORDER); }通过这些绑定消息会根据路由键从交换机流向相应的队列。比如用户的订单消息会先进入 SECKILL_QUEUE然后根据订单的处理结果转发到 SECKILL_QUEUE_ORDER_SUCCESS 或 SECKILL_QUEUE_ORDER_FAIL。 4. 死信队列的作用 在这套设计中死信队列的作用至关重要。死信队列用于接收那些无法正常处理的消息比如订单支付超时或者系统异常。死信队列绑定了一个死信交换机当消息过期如上文的 5 分钟 TTL或者被拒绝时会自动进入死信队列。这样我们就能针对这些问题订单进行统一处理比如取消订单、回滚库存等操作。
http://www.ho-use.cn/article/10817662.html

相关文章:

  • pc网站 手机网站 微信温州seo排名
  • 如何在各个购物网站之间做差价外贸企业网站设计公司
  • 关于网站及新媒体平台建设的规划网站建设与管理维护的答案李建青
  • 网站首页做301四库一平台查询系统
  • 铁道部建设监理协会网站查询sem跟seo的区别
  • 如何自己制作网站现在还有什么推广渠道
  • 手机宣传网站什么是响应式网站设计
  • 台州做网站电话wordpress注册邮箱验证
  • 湖南长沙益阳网站建设wordpress 友情链接 插件
  • 哪个网站是专门做封面素材谷歌浏览器app
  • 榆中建设局网站wordpress账户打通
  • 网站制作如皋个人网站怎么备案
  • 泊头网站排名优化最新装修设计效果图大全
  • 网站建设先买主机还是天津市武清区住房建设网站
  • 个人建站什么网站好淘宝商城网站建设
  • 连江福州网站建设深圳建网站三千
  • 如何知道别人的网站流量来自于哪里wordpress 跳转 微信
  • 设计网站最重要的是要有良好的无备案网站广告如何做
  • 开网站做网站seo入门黑帽培训教程
  • 怎么申请信用卡收款网站接口海报在线生成
  • 沈阳网站设计价格哈尔滨h5建站模板
  • 电子商务网站建设 课件某某公司网络营销策划书
  • 网站项目综合设计作业 代做做网站买服务器怎么样
  • 做网站推广汉狮网络百度智能建站适合优化吗
  • 网站如何盈利福建网站开发企业
  • 贷款网站织梦模板源码交互式网站开发技术有哪些
  • iis7添加php网站页面设计作品
  • 县电子政务办网站建设工作思路图片做视频在线观看网站
  • 海外仓网站建设怎么做网页会议邀请函
  • 湘潭学校网站建设 磐石网络第一怎么做自己的cpa网站