微服务可以简单理解成将一个大的项目拆分成多个小的项目,项目之间可进行交互
好处:进程独立,耦合性低升级难度小,可读性高开发效率高
弊端:有一定的维护成本
微服务设计的关键组件:服务的注册,发现,配置,限流降级,访问入口管理,分布式事务管理等
聚合工程:实现工程之间资源的的共享,简化工程管理
微服务粒度
粗粒度优先,逐步拆分
最好的方式是先专注于各个服务之间的交互,先把它们划分成粗颗粒度的服务,然后随着系统的升级和功能的提升,再将这些粗颗粒度的服务逐渐细化,形成更为合理的微服务粒度。
反之,如果所设计的微服务颗粒度太细,一个明显的标志就是每一个微服务几乎都需要和其他的微服务进行沟通,每个微服务只承担其中很少量的业务处理,然后就交给其他微服务处理,造成了一个外部请求需要经过太多的微服务才能够完成处理。当你想单拎出一个服务时,发现几乎不可能,因为每一个微服务都依赖于其他微服务,同时又被其他微服务所依赖。
不适合微服务的场景
构建分布式架构非常吃力时;
服务器蔓延时;
采用小型应用、快速产品原型时;
对数据事务的一致性有一定要求时。
pom文件中元素的作用:
maven工程中build元素:定义项目的编译,打包方式
maven父工程的packaging元素内的值:父工程默认打包方式为pom方式
maven父工程中dependencyManagement元素:项目依赖的版本,当前工程或子工程不需要再指定版本
Maven父工程中如何统一定义JDK编译和运行版本:配置maven编译插件:maven-compiler-plugin
Maven工程pom.xml文件有删除线怎么解决:修改idea中maven的配置
pom文件配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jt</groupId>
<artifactId>01-sca</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>sca-consumer</module>
<module>sca-gateway</module>
<module>sca-provider</module>
<module>sca-common</module>
</modules>
<!--统一依赖版本(spring boot,spring cloud,spring cloud alibaba)
注意,这里只做版本管理-->
<dependencyManagement>
<dependencies>
<!--Spring Boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.2.RELEASE</version>
<type>pom</type><!--允许scope的值为import时,type的值必须pom-->
<scope>import</scope> <!--这里的import类似java中的import-->
</dependency>
<!--Spring Cloud (Spring Cloud 工程依赖于spring boot),
spring cloud中定义的是一些微服务规范。-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud Alibaba (这套依赖是基于Spring Cloud规范,做了具体的落地实现)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--定义公共依赖(lombok,test)-->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<!--springboot 2.2以后版本默认单元测试使用的是junit5,
所以junit4以前的测试引擎不在需要-->
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--定义统一编译运行环境(jdk)-->
<build>
<plugins>
<!--定义maven的编译插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
常见Bug分析
maven配置错误(idea中指定你本地库)
maven依赖无法下载(首先要确保你的依赖的是正确,maven配置是正确,都正确就清一下缓存)
单元测试@Test注解包引入错误(junit4,junit5)
单元测试类写错了位置。