文章目录
- 一,282-商城业务-订单服务-提交订单的问题
- 调试过程中出现的问题
- services面板介绍
- 什么是 Services Panel?
- 主要作用
- 解决的痛点
- 使用方法
- 二,283-商城业务-分布式事务-本地事务在分布式下的问题
- 分布式事务问题
- 解决方案
- 分布式事务处理流程
- 事务保证
一,282-商城业务-订单服务-提交订单的问题
这一节的主要内容是测试正常情况下的订单提交
流程是否顺畅。
调试过程中出现的问题
- 出现异常后,因为没有分布式事务,导致库存占用无法回滚,调试几次,库存就不够了,可以把库存调到很大
- 没有开启网关服务,导致nginx请求失败
services面板介绍
什么是 Services Panel?
Services Panel 是 IntelliJ IDEA 提供的一个功能模块,旨在帮助开发者更好地管理和监控应用程序中的服务组件。它位于 IDE 的右侧面板中,可以方便地访问一系列与项目相关的服务和工具。
主要作用
-
统一管理工具和服务:
- Services Panel 将多种工具和服务整合在一起,包括构建工具、版本控制系统、测试框架等,使得开发者可以在一个地方管理所有这些工具。
-
提高开发效率:
- 通过将常用的工具和服务集中在一个面板上,开发者可以更快地访问和使用它们,从而提高工作效率。
-
简化调试过程:
- Services Panel 提供了丰富的调试工具,比如查看日志文件、监控应用性能、执行单元测试等,有助于快速定位问题。
-
增强协作能力:
- 集成了版本控制工具,便于团队成员之间的代码共享和协作。
-
扩展性:
- 支持插件扩展,可以根据项目需求添加更多的服务和工具。
解决的痛点
-
快速访问项目服务:无需在不同的窗口或工具之间切换,所有的服务都可以在一个面板上访问,大大节省了时间。
-
简化项目配置:自动检测和配置项目依赖和服务,减少手动配置的时间和错误。
-
提升调试体验:提供强大的调试工具,如断点、步进执行等功能,帮助开发者快速解决问题。
-
团队协作更加顺畅:集成版本控制系统,方便进行代码审查、合并分支等操作,增强了团队间的协作。
使用方法
-
打开 Services Panel:
- 在 IntelliJ IDEA 中,可以通过主菜单栏选择 View > Tool Windows > Services 或者直接点击工具栏上的 Services 图标来打开 Services Panel。
-
查看可用服务:
- Services Panel 默认显示一些常用的服务,如 Git、Maven、Gradle 等。可以通过面板左侧的树形结构查看和管理这些服务。
-
执行操作:
- 可以直接在面板中执行相关操作,比如提交更改、运行构建任务、执行测试等。
-
定制面板:
- 可以根据个人喜好和项目需求定制 Services Panel,添加或移除服务,甚至安装额外的插件来扩展面板的功能。
-
调试和监控:
- Services Panel 还提供了查看日志文件、监控应用性能等功能,这对于调试和监控应用非常有用。
-
团队协作:
- 使用面板中的版本控制工具来管理代码仓库,方便团队成员之间的协作。
二,283-商城业务-分布式事务-本地事务在分布式下的问题
因为商城是分布式服务,不同的服务操作不同的数据库,而事务只能保证同一个数据库连接的原子性,不能保证多个不同的连接的原子性。
分布式事务问题
- 订单服务异常:如果订单服务在处理过程中出现异常,库存锁定将不运行,需要全部回滚,撤销操作。
- 库存服务事务自治:如果库存服务在锁定库存时失败,需要全部回滚,订单服务也应继续回滚。
- 库存服务锁定成功,但网络原因返回数据途中问题:如果库存服务成功锁定库存,但在返回结果时遇到网络问题,如何处理?
- 库存服务锁定成功,但库存服务下面的逻辑发生故障:如果库存服务成功锁定库存,但在后续的逻辑处理中发生故障,订单服务已经回滚,如何处理?
解决方案
- 利用消息队列实现最终一致性:在库存服务成功锁定库存后,发送消息到消息队列(如当前库存工作单),过一段时间自动解锁。解锁前先查询订单的支付状态,解锁成功后修改库存工作单详情项状态为已解锁。
分布式事务处理流程
- 订单服务下订单:订单服务首先发起订单创建请求。
- 库存服务锁定库存:订单服务请求库存服务锁定库存。
- 用户服务扣减积分:订单服务请求用户服务扣减积分。
事务保证
- 订单服务异常:如果订单服务在处理过程中出现异常,库存锁定将不运行,需要全部回滚,撤销操作。
- 库存服务事务自治:如果库存服务在锁定库存时失败,需要全部回滚,订单服务也应继续回滚。
- 网络问题:如果库存服务成功锁定库存,但在返回结果时遇到网络问题,可以通过消息队列确保最终一致性。
- 逻辑故障:如果库存服务成功锁定库存,但在后续的逻辑处理中发生故障,订单服务已经回滚,可以通过消息队列和定时任务来处理解锁和状态更新。