百度站长平台验证网站,音乐介绍网站怎么做的,鞍山seo,如何把网站设为正确建设中前言#xff1a;
在电商项目中的支付模块也是一个很重要的模块#xff0c;其中下订操作以及退订操作就是主要的操作。其次的下单是同步下单#xff0c;也就是第三方支付、数据库扣减、积分增加、等等其他业务操作#xff0c;等待全部执行完毕后向用户返回成功响应请求。对…前言
在电商项目中的支付模块也是一个很重要的模块其中下订操作以及退订操作就是主要的操作。其次的下单是同步下单也就是第三方支付、数据库扣减、积分增加、等等其他业务操作等待全部执行完毕后向用户返回成功响应请求。对于小体量系统那么是可以的但是随着项目的扩大后续下单中可能会添加新的业务那么一整个下订的业务流程可能就会变得很长增加了响应的时间那么此时对于用户的体验来说肯定是不好的。所以就需要将同步下单改为异步下单来提高用户的体验。 首先就是同步下单改为异步下单流程
起始同步下单也就是在下订方法中还需要涉及很多的业务操作比如库存扣减、订单积分写入等等那么当一个用户下单后就需要等待这些操作全部完成才会返回正常的结果那么在系统繁忙的时候可能整个流程消耗的时间会比较长对于用户来说那么体验肯定是不好的。 异步下单
异步下单就是可以将上述的很多操作比如积分写入等等操作通过MQ进行异步消费处理。那么就可以提高响应速度来提升用户体验。
但整个下单的核心无论是同步还是异步最为重要的步骤肯定是库存的扣减与检查。 那么整个下单流程应该就如下
用户下单
检查对应商品库存Redis
库存充足则对Redis中的库存进行扣减Lua
然后数据库的扣减交由MQ进行异步消费扣减。
以及其他业务操作等设计各个表插入都可以交由MQ进行异步消费。 退订退款处理
如果一个下订业务要包括这么多业务处理当一个用户下单后执行了第三方支付扣减、缓存数据扣减、异步数据库扣减等等那么假设用户下订完毕后突然发现买错了然后在短时间内立马又退订而此时之前已经成功下订并将异步消息在MQ中进行处理而此时消息已经在MQ中了该如何解决与退订的各种数据退回操作。 情况一
下订后的异步任务在MQ中还没有消费、退订的各种操作先执行。这种情况就是用户刚下订没多久后立即退订会产生而正常的退订是说用户可能在到货后退货处理等几天后才进行退订那么这种业务一般不会出现这种情况 思路关键信息就是订单号 以及订单标识
正常业务来讲应该订单表和退订表是两个表。 那么一个订单所有的步骤全部执行完毕后就会写入到订单表中那么此时根据退订ID就可以先去订单表中查询这个订单是否已经完成或者查看订单标识完成了就代表该下订的异步MQ任务全部执行完毕此时可以执行退订的各种业务反向操作。退订同样可以交由MQ进行异步反向处理提高用户体验。 如果发现订单表中该订单还未完成那么就将退订流程通过RabbitMQ的延迟消息进行处理比如等待30S等具体时间可以根据业务以及系统进行分析判断然后进行延迟判断如果延迟消息处理时发现还未完成则重发消息直到等待订单完成后此处操作有点类似订单超时取消再进行退订处理。