今天与小伙伴们一起聊聊整个实战专栏最后的准备工作,包括:项目说明、流程设计、技术选型和模块划分。
项目说明
经过一段时间的反复思考,整个《SpringCloud Alibaba实战》专栏采用实战案例的形式为大家进行讲解。在案例上,选择了大家都比较熟悉的电商项目中的用户、商品和订单模块为例。一方面是这些模块的业务逻辑比较简单,另一方面,案例最终会以微服务的形式呈现给大家。
所以,各模块之间会涉及到远程调用、服务治理、服务限流、服务熔断、服务降级、服务容错等功能,会使用注册中心来注册和管理服务。
另外,微服务项目会涉及到多模块之间的调用问题,一旦某个接口或者服务出现问题,很难通过排查日志定位问题。所以,项目采用微服务架构后,就需要采用链路追踪技术来追踪和管理各个服务之间的调用关系。
所以,采用大家都比较熟悉的电商模块,并且还能够学到这么多技术,何乐而不为呢?
项目流程设计
整个项目主要分为用户微服务、商品微服务和订单微服务,整个过程模拟的是用户下单扣减库存的操作。这里,为了简化整个流程,将商品的库存信息保存到了商品数据表,同时,使用商品微服务来扣减库存。
小伙伴们在实现时,也可以将商品库存信息单独开发一个微服务模块,主体逻辑和将库存信息放在商品微服务进行管理是一样的。各服务之间的调用流程如下。
用户微服务、商品微服务和订单微服务的整体流程为:用户通过客户端调用订单微服务的提交订单的接口后,订单微服务会分别调用用户微服务和商品微服务的接口来查询用户信息和商品信息,并校验商品库存是否充足,如果商品库存充足的话,就会保存订单。并且会调用商品微服务的扣减库存的接口来扣减库存。
技术选型
整个项目采用SpringCloud Alibaba技术栈实现,主要的技术选型如下所示。
- 持久层框架:MyBatis、MyBatis-Plus
- 微服务框架:SpringCloud Alibaba
- 消息中间件:RocketMQ
- 服务治理与服务配置:Nacos
- 负载均衡组件:Ribbon
- 远程服务调用:Fegin
- 服务限流与容错:Sentinel
- 服务网关:SpringCloud-Gateway
- 服务链路追踪:Sleuth+ZipKin
- 分布式事务:Seata
- 数据存储:MySQL+ElasticSearch
模块划分
为了方便开发和维护,同时为了模块的复用性,整体项目在搭建时,会将用户微服务、商品微服务和订单微服务放在同一个Maven父工程下,作为父工程的子模块,同时,将用户微服务、商品微服务和订单微服务都会使用的JavaBean单独作为一个Maven模块,以及各服务都会使用的工具类单独作为一个Maven模块。
其中各模块的说明如下所示:
- shop-springcloud-alibaba:Maven父工程。
- shop-bean:各服务都会使用的JavaBean模块,包含实体类、Dto、Vo等JavaBean。
- shop-utils:各服务都会使用的工具类模块。
- shop-order:订单微服务。
- shop-product:商品微服务。
- shop-user:用户微服务。
好了,到此我们的准备工作就做完了,从下一篇开始,我们正式搭建项目开撸源码,今天就到这儿吧,我是冰河,我们下期见~~