SpringCloud

SpringCloud从技术架构上降低了对大型系统构建的要求和难度,使我们以非常低的成本(技术或者硬件)搭建一套高效,分布式,容错的平台.

SpringBoot建议采用2.1.x版本

实际开发中,每个微服务为一个独立的SpringBoot工程

一. 工程的创建

1.1 创建服务的父工程

创建maven工程   配置依赖坐标 (SpringBoot,SpringCloud)

maven的parent 以及SpringCloud的依赖管理坐标

1.2 创建服务提供者(provider)工程

创建SpringBoot工程  勾选依赖坐标    数据库连接信息

编写三层架构: Mapper  Service  Controller

配置Mapper映射文件

在配置文件application.properties 或者 application.yml 中

添加MyBatis配置 扫描mapper.xml和mapper

1.3 创建服务消费者(consumer)工程

创建SpringBoot工程 consumer_service    勾选starter

注册RestTemplate用于发送请求

在Controller中调用RestTemplate   

二. 注册中心 Spring Cloud Eureka

Eureka负责管理记录服务提供者的信息。

服务调用者无需自己寻找服务,Eureka自动匹配服务给调用者。

服务提供者:启动后向Eureka注册自己的信息(地址,提供什么服务)

服务消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新

心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

搭建 eureka-server工程

创建springboot工程      勾选坐标 Eureka_server 

在启动类EurekaServerApplication声明当前应用为Eureka服务

使用@EnableEurekaServer注解  // 开启注册中心

编写配置文件application.yml

在 服务提供者(user-service) 添加注册服务中心 Eureka

先在 服务提供者中导入pom文件

然后再启动类上开启 Eureka 客户端发现功能 

使用注解@EnableDiscoveryClient  // 开启Eureka客户端发现功能

最后在application.yml 中注入eurekaserver配置

在 服务消费者(consumer-service) 添加注册服务中心 Eureka 

在启动类开启Eureka客户端  使用注解@EnableDiscoveryClient  // 开启服务发现

最后修改application.yml配置文件

消费者consumer 通过Eureka 访问提供者provice

首先在controller中注入  DiscoveryClient

Eureka中三个核心角色:

Eureka服务注册中心: 提供服务注册发现功能

服务提供者:  提供服务的应用

服务消费者:  从注册中心获取服务列表 ,知道去哪调用服务方


服务注册过程:

当我们导入了eureka-client依赖坐标,配置Eureka服务注册中心地址

服务在启动时,会检测是否有@DiscoveryClient注解和配置信息

如果有,则会向注册中心发起注册请求,携带服务元数据信息

Eureka注册中心会把服务的信息保存在Map中。

服务的续约:

服务每隔30秒会向注册中心续约(心跳)一次,如果没有续约,

租约在90秒后到期,然后服务会被失效

获取服务列表:

每隔30秒服务会从注册中心中拉取一份服务列表,这个时间可以通过配置修改

三. 负载均衡 Spring Cloud Ribbon

在存在多个服务提供者时, 使用负载均衡

因为Eureka已经集成了Ribbon,所以无需引入依赖

直接在RestTemplate的配置方法上添加注解 @LoadBalanced // 开启负载均衡

修改ConsumerController调用方式,不再手动获取ip和端口,而是直接通过服务名称调用

Ribbon默认的负载均衡策略是轮询 , 可以通过修改配置来变成随机

负载均衡器会动态的从服务注册中心中获取服务提供者的访问地址(host、port) 根据service名称

四.  熔断器 Spring Cloud Hystrix

目标:服务提供者的服务出现了故障,服务消费者快速失败给用户友好提示。服务降级

首先要在服务消费者pom中引入熔断的starter依赖坐标

服务消费者中开启熔断的注解 在启动类上开启

编写服务降级处理方法:  使用@HystrixCommand定义fallback方法

其中fallbackMethod的值要和降级方法名称相同

参数 和 返回值 原方法和降级方法的都要相同

可以配置的熔断策略:

你可能感兴趣的:(SpringCloud)