起因

有一天,苹果和西瓜说:“哎,市面咋没有好用的微服务商城呢?”

西瓜:“太难了呗,你看这个如同是微服务商城耶”

苹果:“这个只有后盾代码,数据库都没”

西瓜:“这个呢”

苹果:“有数据库没前端”

西瓜:“这个呢”

苹果:“有前端,然而是pc的,我要挪动端的”

西瓜:“这个呢”

苹果:“开不了店,不是b2b2c”

西瓜:“这个呢”

苹果:“太旧了,不保护了”

西瓜:“那咱们本人写个吧“

筹备

一个微服务商城应该有啥呢?

答:要拆分服务吧。

拆分之后用啥做服务注册发现呢?

答:spring cloud alibaba 吧,最近挺火的。

都拆开服务了,要分库吧?

答:分,必须分呀。

分完库要解决分布式事务吧?

答:用seata吧,比较简单。谋求性能的时候,用mq实现最终一致性吧。

服务外部调用要用dubbo吧,据说性能挺高的?

答:是呀,不过用http协定会不会好点,毕竟据说dubbo对k8s的兼容不怎么好耶。用http协定,当前革新架构不便呀。

搜寻呢?

答:要分词吧,用es

数据库要同步到es耶,用啥?

答:canal吧

那平安呢?登录权限呢?

答:平安用security,登录之类的本人手写吧,spring security的那套太简单了。

金额呢?

答:用分啦

施行

做一个商城的第一步,对立异样解决

原本构想是dubbo的,起初发现dubbo和nacos的兼容性不太好,k8s也有很多dubbo不兼容的坑,决定去除dubbo

引入阿里的代码标准

springcloud2020刚release,迎难而上

简直同时,nacos被爆平安问题,管理员不理不睬的态度,让人愤慨

从新review了一遍平安相干的代码,外部申请封装也进行校验,汲取nacos的教训

seata踩坑

不论性能不性能的问题,rocketmq有事务音讯,rabbitmq要本人写

实现

经验了多个框架的替换,多个踩坑,从泛滥不合理中寻求最正当的后果,每一行代码都是独立实现,都有提交记录,我的项目历经快一年,终于进去了!!!

一个基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的微服务B2B2C电商商城零碎,采纳支流的互联网技术架构、全新的UI设计、反对集群部署、服务注册和发现以及领有残缺的订单流程等,代码齐全开源,没有任何二次封装,是一个非常适合二次开发的电商平台零碎。

一个代码十分标准的微服务商城,应用阿里巴巴代码标准工具扫描,齐全没有异样

目录构造标准

咱们也有本人的目录构造

  • VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
  • DTO(Data Transfer Object):数据传输对象,前端像后盾进行传输的对象,相似于param。
  • BO(Business Object):业务对象,外部业务对象,只在外部传递,不对外进行传递。
  • Model:模型层,此对象与数据库表构造一一对应,通过 Mapper 层向上传输数据源对象。
  • Controller:次要是对外部访问控制进行转发,各类基本参数校验,或者不复用的业务简略解决等。为了简略起见,一些与事务无关的代码也在这里编写。
  • FeignClient:因为微服务之间存在相互调用,这里是外部申请的接口。
  • Controller:次要是对外部访问控制进行转发,各类基本参数校验,或者不复用的业务简略解决等。为了简略起见,一些与事务无关的代码也在这里编写。
  • Service 层:绝对具体的业务逻辑服务层。
  • Manager 层:通用业务解决层,它有如下特色:

    • 1) 对第三方平台封装的层,预处理返回后果及转化异样信息,适配下层接口。
    • 2) 对 Service 层通用能力的下沉,如缓存计划、中间件通用解决。
    • 3) 与 DAO 层交互,对多个 DAO 的组合复用。
  • Mapper长久层:数据拜访层,与底层 MySQL进行数据交互。
  • Task层:因为每个服务之间会存在定时工作,比方定时确认收货,定时将流动生效等状况,这外面的Task实际上连贯的是xxl-job(具体能够查看 https://github.com/xuxueli/xx... )进行任务调度。
  • Listener:监听 RocketMQ 进行解决,有时候会监听easyexcel相干数据。

对于FeignClient,因为微服务之间存在相互调用,Feign 是http协定,实践上是为理解耦,而实际上提供方接口进行批改,调用方却没有进行批改的时候,会造成异样,所以咱们抽取进去。还有就是对内裸露的接口,是很多中央都专用的,所以咱们还将接口抽取了出了一个模块,不便援用。能够看到mall4cloud-api这个模块下是所有对内feign接口的信息。

技术选型

技术版本阐明
Spring Boot2.4MVC外围框架
Feign3.0服务调用
Nacos2.0服务注册与发现
Seata1.4分布式事务
Mybatis2.1长久层框架
hutool5.5JAVA工具集
pagehelper1.3Mybatis分页插件
Redis2.4分布式缓存
RocketMQ2.2音讯队列
canal1.1数据库同步
Spring Cloud Gateway3.0网关
Spring Cloud LoadBalancer3.0负载平衡
ElasticSearch7.9数据搜寻
minio8.0文件上传
Knife4j3.0MVC框架集成Swagger生成Api文档
Element UI2.13UI框架
vue、uni-appvue2.6JS框架

零碎架构图

商城部署后 API 地址

服务地址
mall4cloud-gatway 网关服务http://127.0.0.1:9000
mall4cloud-auth 受权校验服务http://127.0.0.1:9101
mall4cloud-biz 业务代码服务(如图片上传/短信等)http://127.0.0.1:9000
mall4cloud-leaf 基于美团leaf的生成id服务http://127.0.0.1:9100
mall4cloud-multishop 商家服务http://127.0.0.1:9103
mall4cloud-order 订单服务http://127.0.0.1:9106
mall4cloud-payment 领取服务http://127.0.0.1:9113
mall4cloud-product 商品服务http://127.0.0.1:9112
mall4cloud-rbac 用户角色服务http://127.0.0.1:9102
mall4cloud-search 搜寻服务http://127.0.0.1:9108
mall4cloud-user 用户服务http://127.0.0.1:9105

代码运行相干截图

1.后盾截图

  • 平台端

  • 商家端

2.uniapp截图

坑曾经踩了一年,你不花5分钟理解下么

你的点赞激励,是咱们后退的能源~

你的点赞激励,是咱们后退的能源~

你的点赞激励,是咱们后退的能源~

快来点个star吧

https://gitee.com/gz-yami/mal...