这里的Spring Cloud微服务项目模板系列主要介绍的是利用spring cloud做微服务的时候,到底服务应该怎么创建,应该怎么区分,各子模块之间如何配置调用。本文我们介绍的第一章,主要介绍使用spring cloud alibaba创建项目,并且根据业务模块来做微服务的模块划分。同时引入服务治理和远程调用。
服务治理
在spring cloud里面的服务治理其实主要指的就是服务的自动化注册和发现,这两个的解释如下:
服务注册:
在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
服务发现:
服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。
所以一般我们在spring cloud系列里面经常使用到的服务治理主要有:
Eureka Nacos Consul zookeeper等
但是常用的主要是Eureka和Nacos。
远程调用
在spring cloud里面服务与服务之间的远程调用主要是通过http进行调用的,区别于另外一种方式:RPC。关于Http和Rpc之间的调用区别主要有:
序号 | 对比项 | http | rpc |
1 | 通讯协议 | http | tcp |
2 | 性能 | 略低 | 较高 |
3 | 灵活度 | 高 | 低 |
4 | 应用 | 微服务架构 | SOA架构 |
在spring cloud里面,自带提供了两种方式进行远程调用,第一种是Resttemplate和Feign的方式。但是常用最多的主要是Feign的方式。
回到项目模板
接着我们回到正轨,这里主要是介绍模板,整个模板的目录如下:
--------shop-server
---------------shop-common
---------------shop-feignclient
---------------shop-order
---------------shop-product
---------------shop-user
完整的项目图示如下:
这里的话,我们介绍下创建这个模板的初衷概览。
这里主要是模拟一个电商的项目,里面涉及到的业务有用户服务,商品服务,订单服务,各服务之间可以相互调用,形成的完整的业务流程是用户给某个商品下订单。
接下来我们说各个模块的规划区分:
shop-common模块
这个模块的主要作用是一个共同的model,utils,Constants等类,也就是可能会在各个服务之间穿插重复使用的代码块,我们把代码写到这个模块里面。
shop-feignclient模块
这个模块的主要作用是编写所有的feignclient,所有的service需要使用到远程调用的时候,引入这里的client进行调用即可。这个模块里面只会编写feignclient的interface。
shop-order模块
这个模块是用户的订单模块,也就是整个业务里面关于订单的操作(下单、查询订单等)都放在这个服务里面来。
shop-product模块
这个模块主要是商品的模块,我们对于商品的操作(新增商品,编辑商品,查询商品,删除商品,上架等等业务)一般都写到这里来。
shop-user模块
这个模块主要是用户相关的模块,例如对用户的增删改查及登录注册等等。
service模块特殊说明
这里额外提一下,对于我们来说,做的一般都不是超大型的项目,因此也无法形成超大型的微服务,这里的话,因此对于我们来说,一般这种项目模板对于小型项目或者稍微中型点的项目都比较适合,因此这里我们的model层,service层,dao层,controller层和manager层可以直接放在同一个项目里面来。如下图:
备注:
1、上图里面只能看到controller层、dao层、service层,主要是原因是示例项目,暂时没有model层和manager层。
2、在common里面也有model层,那么和service层的model层有什么区别呢?这里回答下,common层主要是各子模块共用的model,在service中的model主要是自身项目使用的model,其他项目不依赖此model。
3、这里我们的演示项目里面几乎涉及不到其他的第三方调用等,因此暂时没有manager层的调用。
最后这里整个模板的微服务项目主要使用到的技术有:
springboot mysql openfeign nacos
主要集成的功能有:
web访问 远程调用 数据库存储 服务注册与发现
本项目比较简单,主要是一个基础的微服务框架,这边把源码下载下来之后,直接运行即可,可访问的url示例如下:
http://127.0.0.1:8081/product/1 http://127.0.0.1:8091/order/prod/1
最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...