谷粒商城

我要开发同款
喜歡看书的貓2023年02月28日
153阅读
开发技术java
所属分类商城springbootSpringCloudredis、rabbitmq

作品详情

项目简介:

该项目是一个B2C电商项目

系统架构:

该系统选用社区论坛作为主域名,其他服务均为子域名,采用SpringCloud架构,利用SpringCloud构建应用,SpringCloud主要采用阿里体系,如使用Nacos进行服务注册、配置中心,使用openFeign进行其他服务的远程调用,Gateway作为网关对请求进行统一处理,数据库采用MySql进行数据持久化,使用RabbitMQ实现延迟队列、可靠消息等,使用Redis作为缓存解决读多写少的场景,并且使用Redis进行session存储、分布式锁等,MyBatisPlus作为持久化框架

我的职责:

负责开发“市场交易”、“社区论坛”模块,本项目以市场交易为例,对接前端与商家平台,完成平台商品、购物车、订单、库存、商品优惠、用户积分、支付等服务模块的编写;

使用RabbitMQ延时队列实现未付款订单,超过一段时间后,系统自动取消订单并解锁库存;

使用redis+lua脚本防止重复提交,解决用户浏览器刷新和回退以及网络卡顿用户重复提交订单的问题;

使用ElasticSearch分布式全文搜索引擎,对冷数据、商品信息数据建立索引,保证冷数据、商品数据的查询性能;

使用Redisson分布式锁配合redis解决分布式系统下高并发问题,以及实现幂等性操作;

使用SpringCache方法级别缓存技术,实现已经被调用过的指定目标方法,将该方法返回的数据存入Redis缓存中,使其下次调用该方法时直接从缓存中获取数据并返回;

使用CompletableFuture异步编排解决业务代码逻辑响应慢的问题,使不相干的代码异步执行,无需等待代码一行一行执行,从而提高代码执行效率;

使用Seata中的AT模式,通过事务协调者和管理器进行管理进行分布式事务自动回滚,保证分布式事务一致性问题;

整合OAuth2.0协议授权,使用AccessToken调用提供的开放API获取用户信息,支持微信、QQ、微博、Gitee、Github等第三方登录;

使用RSA算法的非对称加密保证数据加密安全,对接第三方支付功能,订单支付支持支付宝、微信等第三方支付

所遇问题及解决方案 :

1、使用openFeign调用远程服务时请求头丢失问题,因为feign调用远程服务时,并不是我们客户端发送的请求,而是自己新建了个请求,所以导致请求头丢失,解决方案:feign在调用远程服务之前会遍历拦截器,所以我们可以创建一个interceptor拦截器,获取之前的请求信息并赋值给feign创建的请求当中

2、用户下单时采用Seata解决分布式事务从而导致并发操作失效,由于Seata底层使用了各种锁机制导致并发失效,解决方案为:去除Seata的强一致性,采用RabbitMQ延时队列实现最终一致性,延时队列的消息发出去后,消费端监听并接收到消息负责编写业务逻辑,例如下单操作,在保证接口幂等性的情况下,判断订单支付状态并解锁库存,此时就算订单创建失败,到达一定时间后库存也会自动解锁,从而达成最终一致性

3、接口响应慢,吞吐量低,此时就得优化代码,例如使用异步编排,竟可能减少与数据库的IO次数,给数据库字段加索引,将读多写少的内容放入缓存中,将静态资源放入nginx等操作
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论