当前位置: 首页 > 后端技术 > Java

一个springcloud微服务商城系统的诞生

时间:2023-04-02 10:43:12 Java

是因为有一天,苹果和西瓜说:“哎,为什么市面上没有好用的微服务商城呢?”商城呀”苹果:“这个只有后台代码,没有数据库”西瓜:“这个”苹果:“有数据库但没有前端”西瓜:“这个”苹果:“有前端,但是是PC端,我要移动端”西瓜:“这个怎么样”苹果:“开不了店,不是b2b2c”西瓜:“这个怎么样”苹果:“太老了,没人维护”西瓜:“那我们自己写一个”一个微服务商城应该准备什么?答:我们把服务拆分一下,拆分之后服务注册和发现用什么?答:springcloudalibaba,最近比较火。服务拆了,要分库吗?答:分,必须分,分库后需要处理分布式事务对吧?答:用seata,比较简单,追求性能的时候,用mq实现最终一致性,服务内部调用应该用dubbo,听说性能挺高的?答:可以,但是使用http协议是不是更好?毕竟听说dubbo和k8s的兼容性不是很好。使用http协议,方便以后改造结构。搜索呢?答:分词吧,用es数据库同步到es,用什么?答:运河,安全怎么样?登录权限呢?答:用security、login等自己写。springsecurity设置的太复杂了。金额呢?答:用芬拉实现商城的第一步。统一的异常处理最初是由dubbo构思的。后来发现dubbo和nacos的兼容性不是很好。k8s也有很多dubbo不兼容的坑。决定去掉dubbo,引入阿里。代码规范springcloud2020刚刚出炉,遇到困难。几乎同时,nacos被曝出安全问题,管理员无视的态度让人愤怒,重新审查了安全相关的代码。内部请求包也经过验证,吸取了nacos的教训,让seata不顾性能或性能问题踩坑。Rocketmq有事务消息。Rabbitmq需要自己写。独立完成,有投稿记录,项目时隔快一年终于出来了!!!基于SpringCloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的微服务B2B2C电商商城系统,采用主流互联网技术架构,全新UI设计,支持集群部署,服务注册与发现,并且具有完整的下单流程等,代码完全开源,没有任何二次包装,是一款非常适合二次开发的电商平台系统。一个代码非常规范的微服务商城,用阿里巴巴的代码规范工具扫描,完全没有异常目录结构规范我们也有自己的目录结构VO(ViewObject):展示层对象,通常是从Web传输到模板渲染引擎层。DTO(DataTransferObject):数据传输对象,前端就像是后台传输的对象,类似于param。BO(BusinessObject):业务对象,内部业务对象,只对内传输,不对外传输。Model:Model层,该对象与数据库表结构一一对应,通过Mapper层向上传输数据源对象。Controller:主要转发外部的访问控制,检查各种基础参数,或者简单处理不可复用的服务等。为了简单起见,这里也写了一些与事务无关的代码。FeignClient:由于微服务之间存在相互调用,这里是内部请求的接口。Controller:主要转发内部访问控制,检查各种基本参数,或者简单处理不可重用的服务等。为了简单起见,这里也写了一些与事务无关的代码。服务层:相对具体的业务逻辑服务层。管理层:通用业务处理层,具有以下特点:1)封装第三方平台,对返回结果进行预处理和异常信息转化,适配上层接口的层。2)Service层通用能力的下沉,如缓存解决方案、中间件通用处理等。3)与DAO层交互,复用多个DAO。Mapper持久层:数据访问层,与底层MySQL进行数据交互。Task层:由于每个service之间都会有定时任务,比如receipt的定时确认,activity的定时失效等,所以这里的Task其实是连接到xxl-job上的(具体可以参考https://github.com/xuxueli/xx...)进行任务调度。Listener:监听RocketMQ进行处理,有时会监听easyexcel相关数据。关于FeignClient,因为微服务之间存在相互调用,Feign是一个http协议,理论上是为了解耦,但实际上当provider接口被修改而调用者没有修改时,会引发异常,所以我们提取它。另外,内部暴露的接口在很多地方都是通用的,所以我们也把接口抽出来一个模块,方便引用。可以看到在mall4cloud-api模块下是所有内部feign接口的信息。技术选型技术发布说明SpringBoot2.4MVC核心框架Feign3.0服务调用Nacos2.0服务注册与发现Seata1.4分布式事务Mybatis2.1持久层框架hutool5.5JAVA工具集pagehelper1.3Mybatis分页插件Redis2.4分发RocketMQ2.2消息queuecanal1.1数据库同步SpringCloudGateway3.0网关SpringCloudLoadBalancer3.0负载均衡ElasticSearch7.9数据搜索minio8.0文件上传Knife4j3.0MVC框架集成Swagger生成Api文档ElementUI2.13UI框架vue,uni-appvue2.6JS框架部署商城后系统架构图API地址服务地址mall4cloud-gatway网关服务http://127.0.0.1:9000mall4cloud-auth授权验证服务http://127.0.0.1:9101mall4cloud-biz业务代码服务(如图片上传/短信等)http://127.0.0.1:9000mall4cloud-leaf基于美团叶子的ID生成服务http://127.0.0.1:9100mall4cloud-multishop商户服务http://127.0.0.1:9103mall4cloud-order订单服务http://127.0.0.1:9106mall4cloud-payment支付服务http://127.0.0.1:9113mall4cloud-产品商品服务http://127.0.0.1:9112mall4cloud-rbac用户角色服务http://127.0.0.1:9102mall4cloud-search搜索服务http://127.0.0.1:9108mall4cloud-user用户服务http://127.0.0.1:9105代码运行相关截图1.后台截图平台端商户端2.uniapp截图坑已经踩年了,你不花5分钟看懂吗?你的点赞和鼓励是我们的动力~你的点赞和鼓励是我们的动力~你的点赞和鼓励是我们的动力~加油!让我们starhttps://gitee。com/gz-yami/mal...