# 电子商务系统 **Repository Path**: jiangxuwen/E-commerce-system ## Basic Information - **Project Name**: 电子商务系统 - **Description**: 电子商务系统 涉及技术:springboot、springcloud、FastDFS、springsecurity+jwt+Oauth的密码模式、Rabbit mq、 redis、ElasticSearch、静态化页面、OpenResty(nginx)、阿里Cannal 相关介绍:项目选用分模块开发,完成商品的增删查改以及后续迭代商品上架以及关联详情页静态化和es索引库更新 等业务、参与基于cannal日志监听的广告数据的读取更新以及缓存预热流程设计、添加oauth密码模式 的登录、使用分布式文件存储图片、基于redis和mq的分布式事务的拆分订单和消费积分的处理、基于 死信队列的微信订单关闭处理,完善网关ip、uri频率记录以及跨域和参数校验等、基于令牌桶、漏铜算 法和谷歌guava进行限流(nginx、网关、mq消费端)、对接微信支付和使用mq双向通信插件完成支付 回调信息即时返回、使用RSA非对称加密对jwt增强、完善Feign调用资源服务JWT令牌的传递和资源服 务对reids中jti的解析、基于定时任务和redis预扣减库存的商品秒杀、以及批量发 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2020-11-26 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 电子商务系统 #### 介绍 电子商务系统 涉及技术:springboot、springcloud、FastDFS、springsecurity+jwt+Oauth的密码模式、Rabbit mq、 redis、ElasticSearch、静态化页面、OpenResty(nginx)、阿里Cannal 相关介绍:项目选用分模块开发,完成商品的增删查改以及后续迭代商品上架以及关联详情页静态化和es索引库更新等业务、参与基于cannal日志监听的广告数据的读取更新以及缓存预热流程设计、添加oauth密码模式的登录、使用分布式文件存储图片、基于redis和mq的分布式事务的拆分订单和消费积分的处理、基于死信队列的微信订单关闭处理,完善网关ip、uri频率记录以及跨域和参数校验等、基于令牌桶、漏铜算法和谷歌guava进行限流(nginx、网关、mq消费端)、对接微信支付和使用mq双向通信插件完成支付回调信息即时返回、使用RSA非对称加密对jwt增强、完善Feign调用资源服务JWT令牌的传递和资源服务对reids中jti的解析、基于定时任务和redis预扣减库存的商品秒杀、以及批量发 #### 软件架构 架构说明:spring boot + springcloud + tkmapper #### 开发过程中遇得到的问题 1. 服务器实现CORS跨域资源共享?springMVC使用注解实现跨域,但是版本要4.2以上 2. 配置难点网关限流的搭建?使用了gateway默认支持的redis的RateLimter限流算法来实现 3. 令牌存储问题?通过私钥生成的令牌的jti存到cookie减少cookie大小,jwt令牌以jti为键值存到redis中并设置存活时间。 4. 登录后校验解决方法?网关拦截只做参数有无的校验和参数的传递,比如:对有cookie、redis有参数的请求进行请求头增强,向路由的服务中继续传递 参数,实际对jwt的解析是每一个有公钥资源服务 5. 资源服务与资源服务之间的调用过程中的令牌传递问题?通过实现feign拦截器对每个内部调用的请求头增强,增强内容就是再加jwt 6. 分布式事务解决:有部分用fescar,不过fescar存在事务控制不住的情况,后有订单和积分基于mq和redis拆分事务,较为妥善,不过实现复杂 7. 未接触使用过的技术,解决:边学习边找demo边接入项目中,比如阿里cannel监控数据库数据的变化、静态化技术、oauth #### 项目收获 1. 学习到很多新技术,也在编码的过程中对新技术不断深化了解学习 2. 编码逻辑能力和业务处理能力有所锻炼和提升 3. 提升了自己的编写代码质量,并使代码,接口编写更规范 4. Api调用、运用更加熟练深入,对数据库字段、表的设计 有了更全面的认知 5. 更适应了团队协作、配合和前后端协商 6. 简单了解到各种技术或者架构的潜在问题,技术瓶颈。