Day01

微服务架构了解

微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦
它的主要作用是将功能分解到离散的各个服务当中
在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。

概念: 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。

定义: 围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。

本质: 用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。

1 构建SpringCloud 聚合项目并进行环境初始化

1.1 工程结构

微服务项目一般都会采用聚合工程结构,可通过聚合工程结构实现共享资源的复用,简化项目的管理方式。本小节以一个聚合工程结构为案例,讲解微服务架构方案中的maven聚合工程的基本结构,例如:

GitCGB2108IVProjects (工作区/空项目)├── 01-sca   //(微服务父工程)     ├── sca-provider            //服务提供方法     ├── sca-consumer         //服务消费方法     ├── sca-gateway            //网关服务

1.2 创建一个空的maven项目

1.2.1 配置pom.xml文件

  1. 统一依赖版本(spring boot,spring cloud,spring cloud alibaba)
  2. 定义公共依赖(lombok,test)
  3. 定义统一编译运行环境(jdk)
    <dependencyManagement>        <dependencies>                        <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-dependencies</artifactId>                <version>2.3.2.RELEASE</version>                <type>pom</type>                <scope>import</scope>            </dependency>                        <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>Hoxton.SR9</version>                <type>pom</type>                <scope>import</scope>            </dependency>                        <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>        <dependencies>                <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <scope>provided</scope>        </dependency>                <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>            <exclusions>                <exclusion>                    <groupId>org.junit.jupiter</groupId>                    <artifactId>junit-vintage-engine</artifactId>                </exclusion>            </exclusions>        </dependency>            </dependencies>        <build>        <plugins>                        <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>

1.2.2 注意

1.2.2.1 springboot 2.2以后版本默认单元测试使用的是junit5,所以junit4以前的测试引擎不在需要


测试类测试

若导入的包为import org.junit.Test;且没有写public

1.2.2.2 打包方式


1.2.2.3 测试类作用域限制

1.2.2.4 build

Maven是通过pom.xml来执行任务的,其中的build标签描述了如何来编译及打包项目,而具体的编译和打包工作是通过build中配置的 plugin 来完成。

plugin配置不是必须的,默认情况下,Maven 会绑定以下几个插件来完成基本操作

1.2.1 可能出现的问题

maven项目删除后以相同名字重建时pom.xml文件可能失效

1.3 服务关系以及调用关系设计

1.4 总结

微服务是一个架构设计方式,此架构中的每个服务(service)都是针对一组功能而设计的,并专注于解决特定的问题。如果开发人员逐渐将更多代码增加到一项服务中并且这项服务变得复杂,那么可以将其拆分成多项更小的服务(软件即服务,所有软件对外的表现形式就诗提供一种或多种业务服务)。接下来进行独立的开发、测试、部署、运行、维护。进而更好,更灵活的处理客户端的请求并提高系统的可靠性,可扩展性。

2 练习测试

2.1 整数池测试

在sca-common创建testIntegerCache测试类

@Test    public void testIntegerCache(){        /*Integer类在加载时会在内存中创建一个整数池         池中会默认存储 -128~127         JDK提供了一种自动装箱机制         */        /*享元模式:池化思想        * 通过池减少对象创建        * */        Integer a=100;  //Integer.valueOf(100)        Integer b=100;        Integer c=200;        Integer d=200;        System.out.println(a==b);//true        System.out.println(c==d);//false    }


2.2 本地方法依赖 (使用自己创建的工具类)



在sca-gateway添加依赖

测试

2.3 关于@Autowired