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

安徽弘泰建设管理有限公司网站万网网站备案授权书

安徽弘泰建设管理有限公司网站,万网网站备案授权书,wordpress目录设置,红色经典ppt模板免费下载在支付系统中#xff0c;如何确保支付状态的准确传递和处理显得尤为重要。今天#xff0c;我们将以一个支付流程为例#xff0c;探讨在引入RabbitMQ前后的实现和优化。 改造前 在引入RabbitMQ之前#xff0c;我们通常会直接在支付方法中完成所有的操作。这包括查询支付单…在支付系统中如何确保支付状态的准确传递和处理显得尤为重要。今天我们将以一个支付流程为例探讨在引入RabbitMQ前后的实现和优化。 改造前 在引入RabbitMQ之前我们通常会直接在支付方法中完成所有的操作。这包括查询支付单、判断状态、扣减余额、修改支付单状态以及通知订单服务等。以下是一个典型的实现 Override Transactional public void tryPayOrderByBalance(PayOrderFormDTO payOrderFormDTO) {// 1.查询支付单PayOrder po getById(payOrderFormDTO.getId());// 2.判断状态if (!PayStatus.WAIT_BUYER_PAY.equalsValue(po.getStatus())) {// 订单不是未支付状态异常throw new BizIllegalException(交易已支付或关闭);}// 3.尝试扣减余额userClient.deductMoney(payOrderFormDTO.getPw(), po.getAmount());// 4.修改支付单状态boolean success markPayOrderSuccess(payOrderFormDTO.getId(), LocalDateTime.now());if (!success) {throw new BizIllegalException(交易已支付或关闭);}// 5.修改订单状态tradeClient.markOrderPaySuccess(po.getBizOrderNo()); }代码解读 查询支付单通过支付单ID查询对应的支付单信息。判断支付状态检查支付单状态是否为“等待买家付款”如果状态异常则抛出业务异常。扣减用户余额调用用户服务尝试扣减用户余额。修改支付单状态如果扣减余额成功则更新支付单状态为“支付成功”。通知订单服务直接调用订单服务更新订单状态。 存在的问题 强耦合支付服务和订单服务强耦合修改其中一个模块可能会影响到另一个模块。失败处理如果在某一步骤失败整个流程需要回滚复杂度增加。可扩展性差难以扩展其他需要在支付成功后进行处理的业务逻辑。 改造后 为了提高系统的可靠性和可维护性我们引入RabbitMQ来实现支付状态的异步通知。改造后的代码如下 Override Transactional public void tryPayOrderByBalance(PayOrderFormDTO payOrderFormDTO) {// 1.查询支付单PayOrder po getById(payOrderFormDTO.getId());// 2.判断状态if (!PayStatus.WAIT_BUYER_PAY.equalsValue(po.getStatus())) {// 订单不是未支付状态异常throw new BizIllegalException(交易已支付或关闭);}// 3.尝试扣减余额userClient.deductMoney(payOrderFormDTO.getPw(), po.getAmount());// 4.修改支付单状态boolean success markPayOrderSuccess(payOrderFormDTO.getId(), LocalDateTime.now());if (!success) {throw new BizIllegalException(交易已支付或关闭);}// 5.发送支付成功消息try {rabbitTemplate.convertAndSend(pay.direct, pay.success, po.getBizOrderNo());} catch (AmqpException e) {log.error(发生支付状态通知失败订单id:{}, po.getBizOrderNo(), e);} }public boolean markPayOrderSuccess(Long id, LocalDateTime successTime) {return lambdaUpdate().set(PayOrder::getStatus, PayStatus.TRADE_SUCCESS.getValue()).set(PayOrder::getPaySuccessTime, successTime).eq(PayOrder::getId, id)// 支付状态的乐观锁判断.in(PayOrder::getStatus, PayStatus.NOT_COMMIT.getValue(), PayStatus.WAIT_BUYER_PAY.getValue()).update(); }代码解读 查询支付单通过支付单ID查询对应的支付单信息。判断支付状态检查支付单状态是否为“等待买家付款”如果状态异常则抛出业务异常。扣减用户余额调用用户服务尝试扣减用户余额。修改支付单状态如果扣减余额成功则更新支付单状态为“支付成功”。发送支付成功消息通过RabbitMQ发送支付成功的消息通知其他系统或服务支付已完成。 异步通知的实现 改造后的系统中我们通过RabbitMQ实现了异步消息通知。以下是支付状态监听器的实现 Component RequiredArgsConstructor public class PayStatusListener {private final IOrderService orderService;RabbitListener(bindings QueueBinding(value Queue(name trade.pay.success.queue, durable true),exchange Exchange(name pay.direct),key pay.success))public void listenPaySuccess(Long orderId) {orderService.markOrderPaySuccess(orderId);} }监听器解读 监听队列绑定支付成功的队列和交换机并指定路由键。处理消息监听到支付成功的消息后调用订单服务更新订单状态。 总结 通过引入RabbitMQ我们实现了支付状态的异步通知解决了系统强耦合、失败处理复杂、可扩展性差的问题。RabbitMQ不仅提高了系统的可靠性还使得系统更加易于维护和扩展。
http://www.dnsts.com.cn/news/222056.html

相关文章:

  • 网站算阵地建设宿州专业网站建设
  • 网站策划编辑招聘西安城乡建设网站
  • 孟州网站跨平台 移动网站开发
  • 考百度指数 某个关键词在某个行业网站上的中山市技术支持 中山网站建设
  • 程序员做情侣网站阜阳商城网站建设
  • 网站制作先做数据库还是前台微信网页版平板
  • 建设网站开通网线多少钱企业做国际站哪个网站好
  • 上海浦东建筑建设网站污水处理工程如何快速网络推广
  • 怎嘛做网站wordpress 主题安装
  • 淮南房地产网站建设网站wordpress做外贸
  • 常规网站服务器asp.net mvc 5网站开发之美 pdf
  • python做网站例子wordpress 错误500
  • hyip系统网站开发网站结构化数据
  • js网站统计代码百度网盘下载的文件在哪
  • 网站开发易语言wordpress 获取作者名
  • 注册公司域名后如何做网站wordpress实现文章目录
  • 网站建设氺金手指排名12国家新闻最新消息今天
  • 韶关市住房和城乡建设管理局网站做网站的必要
  • 北京中御建设公司网站个人网站模板建站
  • 商城分销论述搜索引擎优化的具体措施
  • 中国兰州网官网seo和sem的区别
  • 云南网站设计方案去除wordpress版本号
  • 网站关键词全美网站建设
  • 厂家做网站长春找工作哪个网站好
  • 哈尔滨建设工程招聘信息网站做网站 没内容
  • 网站稳定性不好的原因温州网站优化页面
  • 如何搭建网站的结构合肥正规制作网站公司
  • wordpress网站刷新python做网站难么
  • 商城入口深圳seo优化公司哪家好
  • 山西通州集团网站建设自己做的网站发布到网上视频播放不了