目录
一.概述
从Mybatis,到Spring Boot,再到Spring Cloud实际谈的都不是代码怎么写,而是框架怎么设计.
MyBatits做了数据的持久化,实现了dao层的分离,将dao的结构与SQL语句分解成接口与XML文件,实现了程序与SQL语句的解耦.
Spring Boot简化了Spring的操作,个人认为是将面向接口编程的概念更加的深化了,通过灵活的配置实现接口与类的关联,而不再需要通过类来实例化接口,使得dao,service,controller三者之间的关系更加的松散,结构更加的灵活.
Spring Cloud的出现解决了分布式部署的问题,具体来说它实现了将原本一个整体的程序,拆分成多个模块,并且将模块做成服务,添加了服务治理中心(eureka-server),网关(gateway)这些模块.一个模块可以有多个服务的实例,每个实例都在eureka-server进行注册,续约,下线.由网关管理每个服务的访问,并使用openfeign进行各服务之间的调用.
想象一下既然要把一个项目使用Spring Cloud框架拆解成若干个服务,那么必然不是一个小型的项目,显然会需要考虑各服务之间的访问量和出错情况.实际上引入Spring Cloud之后,项目的内部结构和关系变得更加的复杂,这是必然的,但是这种复杂度换来的却是我们的程序的扩展性,效率性更好.当时各服务出现问题的情况也必然出现,所以又引入了熔断器(Resilience4j).
熔断器通过断路器,限速器,舱壁隔离等组件实现服务模块功能上的健壮性,在分布式部署中,面对访问量的增加,使用Resilience4j有效的管理服务的访问与流量之间的相互作用.
由于这些技术的使用关键的不是代码,而是项目的搭建,所以本文要做的事情就是使用上面的这些框架搭建一个项目雏形.
在这之前可以先阅读前面几篇文章:
微服务开发(一) Spring Cloud 到底是什么?_flame.liu的博客-CSDN博客
微服务开发(二) :Spring Cloud:OpenFeign 服务调用与网关_flame.liu的博客-CSDN博客
微服务开发(三) Spring Cloud 网关gateway_flame.liu的博客-CSDN博客
微服务开发(四) Spring Cloud 与熔断器(Resilience4j)_flame.liu的博客-CSDN博客
二.技术交底
本文除了上面提到使用SSM,Spring Boot,Spring Cloud之外,还将使用下面的这些技术:
- mysql:数据库
- redis:作为程序的缓存
- mybatis-plus: 生成SSM开发的dao,service,controller,减少前期代码的编写
- Spring doc: 作为spring boot API的文档工具,并且作为简单的方法测试.
- vue3: 作为前端展现. 当然在本篇文章中会弱化此项.
编译工具用到的有:idea,VS Code,Navicat for MySql,RedisDesktopManager
三.架构设计
项目架构的设计就像建一栋楼盘的图纸一样非常的重要,如果你是搭一间二层楼的房子,这个图纸的重要性可能不大,但是如果你是用Spring Cloud做开发,显然这将会是一栋30多层的建筑,如果图纸设计错误,造成的后果可能就是推倒重来,所以,项目前期的架构设计非常的重要,我尝试用一张图来描述这个项目的架构.
在这个图中我们可以看到以下几点:
1.在整个工程中是以模块的形式搭建的项目,包含这几个模块
1) common模块,包含