SpringCloud

112 阅读3分钟

SpringCloud介绍

微服务介绍

1.微服务就是将一个应用程序,拆分成多个小模块去分别开发
2.微服务是一种样式,也是一种风格
3.每个模块都是单独运行在一个模块中
4.每个模块都需要相互通信
5.每个模块之间没有依赖性,都是独立部署的
6.可以使用多种不同的语言去开发不同的模块
7.使用Mysql数据库,Redis,ES去储存数据,也可以使用多个Mysql数据库

SpringCloud介绍

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

服务的注册与发现-Eureka

介绍

Eureka:就是帮助我们维护服务之间的信息,方便服务之间的相互调用 Robbin:帮助我们实现服务与服务之间的负载均衡,Robbin属于客户端负载均衡 Feign:可以帮助我们实现面向接口开发,就直接调用其他的服务,简化开发 Fallback:可以帮助我们再去调用Feign去调用另外一个服务,如果出现问题,走服务降级,返回一个错误数据,避免功能因为一个服务问题,全部失效 FallbackFactory:当调用方法报错时,不知道具体的报错信息,可以通过FallbackFactory的方式去实现这个功能

Eureka:安全性 需要导入包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

创建父项目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>org.example</groupId>
    <artifactId>01-sca</artifactId>

    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>01-eureka</module>
        <module>01-customer</module>
        <module>02-eureka</module>
        <module>01-search</module>
    </modules>
    <packaging>pom</packaging>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.3.7.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,type必须为pom-->
            <scope>import</scope><!--引入三方依赖的版本设计-->
        </dependency>
    </dependencies>
</dependencyManagement>
    <dependencies>
        <!--lombok 依赖,子工程中假如需要lombok,不需要再引入-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope><!--provided 表示此依赖仅在编译阶段有效-->
        </dependency>
        <!--单元测试依赖,子工程中需要单元测试时,不需要再次引入此依赖了-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope><!--test表示只能在test目录下使用此依赖-->
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <!--第三步: 定义当前工程模块及子工程的的统一编译和运行版本-->
    <build><!--项目构建配置,我们基于maven完成项目的编译,测试,打包等操作,
    都是基于pom.xml完成这一列的操作,但是编译和打包的配置都是要写到build元素
    内的,而具体的编译和打包配置,又需要plugin去实现,plugin元素不是必须的,maven
    有默认的plugin配置,常用插件可去本地库进行查看-->
        <plugins>
            <!--通过maven-compiler-plugin插件设置项目
            的统一的jdk编译和运行版本-->
            <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>

Eureka使用

需要导入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

再启动类中添加注解

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

编写yml文件

详细介绍

RestTemplate:RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,所以很多客户端比如 Android或者第三方服务商都是使用 RestTemplate 请求 restful 服务。

eurekaClient:获取服务信息

注解介绍

@EnableEurekaServer:开启服务
@EnableEurekaClient:开启客户端
@EnableWebSecurity:对服务进行加密
@LoadBalanced:开启负载均衡
@EnableFeignClients:
@FeignClient:注解的包路径,扫描这些包下的所有类,获取被`@FeignClient`注解的接口,生成代理对象。
@EnableCircuitBreaker:使用断路器
@HystrixCommand:Hystrix命令
@HystrixProperty:配置熔断还是隔离
@EnableHystrixDashboard:使Hystrix仪表板
@Component 将当前类未来的对象交给容器管理
@CacheResult:帮助我们缓存当前方法的返回结果配合HystrixCommand使用
@CacheRemove:帮助我们清除一个缓存信息
@CacheKey:指定那个方法参数作为缓存的标识