Eureka,Zookeeper,Consul,Ribbon,OpenFeign

SpringBoot与SpringCloud对应版本关系
所用到的项目,请参考这里

微服务架构图

在这里插入图片描述

自动热部署

1)、添加到你的模块中

1
2
3
4
5
6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>

2)、下面配置我们粘贴进聚合父类总工程的pom.xml里

1
2
3
4
5
6
7
8
9
10
11
12
13
<build>
<fileName>你自己的工程名字<fileName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>

3)、更改设置
在这里插入图片描述
4)、选择Ctrl + Alt + Shift + /,点击Registry,勾选下面两个,再进行重启IDEA
在这里插入图片描述

基础环境搭建

搭建好commons要记得先clean,再install到本地仓库。再进行8001和80模块的引用。
在这里插入图片描述

Eureka

服务注册与发现
2020-05-18 15:19:00

基础知识

在这里插入图片描述

单机

注意点:两个坐标,server,client 两个注解,@EnableEurekaServer,@EnableEurekaClient

这里只演示了8001,80也是同样的用法。
在这里插入图片描述

集群

1)、先修改本地hosts文件
在这里插入图片描述
2)、服务器
在这里插入图片描述
3)、客户端
在这里插入图片描述
4)、查看Eureka页面
在这里插入图片描述

负载均衡

复制模块8001,只修改配置文件端口号为8002
在这里插入图片描述

微服务信息完善

在这里插入图片描述

DiscoveryClient服务发现

SpringCloud服务发现DiscoveryClient的使用
在这里插入图片描述

Eureka自我保护

1)、故障现象
在这里插入图片描述
2)、导致原因
在这里插入图片描述
3)、7001 server,8001 client设置
在这里插入图片描述
4)、Server7001一直在2秒一次进行检测。此时关闭8001,8001在2秒之后没有连上,说明不行了,进行删除。(这时删除是的客户端,服务端的实例列表中还存在)
客户端删除之后,Server7001端检测到client8001不行了,这时进行服务端的删除。(这时Eureka页面的实例列表才会删除那个客户端)
总结:先在Client端进行删除,再进行Server端删除。
在这里插入图片描述

Zookeeper

服务注册与发现
Zookeeper是一个分布式协调工具,可以实现注册中心功能

Eureka停止更新公告
在这里插入图片描述

下面来使用SpringCloud整合Zookeeper替代Eureka
2020-05-19 15:29:12

环境搭建

1)、使用Docker启动Zookeeper

2)、配置好网络,使之ping通

3)、关闭防火墙

提供者8004

在这里插入图片描述

1)、测试1,浏览器服务测试
在这里插入图片描述

2)、测试2,进入zk客户端查看实例
在这里插入图片描述

3)、问题:服务节点是临时节点还是持久节点?

答:临时节点
在这里插入图片描述

消费者80

POM文件的依赖同提供者8004

1)、搭建
在这里插入图片描述

2)、测试
在这里插入图片描述

Consul

服务注册与发现
2020-05-19 15:31:40

简介

1)、Consul是什么?
在这里插入图片描述
2)、Consul能做什么?
在这里插入图片描述

安装&启动

Consul安装启动
在这里插入图片描述

提供者8006

1)、模块搭建
在这里插入图片描述

2)、测试
在这里插入图片描述

消费者80

1)、模块搭建
在这里插入图片描述

2)、测试
在这里插入图片描述

Eureka,Zookeeper,Consul

CAP

分区容错性要保证,所以要么是CP,要么是AP
C: Consistency(强一致性)【Zookeeper/Consul,失效服务直接剔除】
A: Availability(可用性)【Eureka,失效服务不会立即删除】
P: Parttition tolerance(分区容错性)

CAP理论关注粒度是否是数据,而不是整体系统设计的策略

一张经典CAP图
在这里插入图片描述

AP & CP

1)、AP(Eureka)
例如:订单的数量如果错了,不会影响商品的卖出。
在这里插入图片描述

2)、CP(Zookeeper/Consul)
当网络分区出现后,为了保证一致性,就必须拒绝请求,否则无法保证一致性
结论:违背了可用性A的要求,只满足一致性和分区容错,即CP
在这里插入图片描述

Ribbon

负载均衡调用
2020-05-20 09:34:29

简介

1)、Ribbon是什么?
在这里插入图片描述

2)、Ribbon目前也进入维护模式【虽然进入维护模式,因为产品很好,所以还是很多人在用】
在这里插入图片描述

3)、未来替换方案 SpringCloud loadBalancer
在这里插入图片描述

4)、Ribbon能干嘛?
LB(Load Balanced 负载均衡)
在这里插入图片描述

集中式LB
即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方;
例如:看病需要挂号,使之分配到对应的科室。

进程内LB
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。
Ribbon就属于进程内LB,它只是一个类库, 集成于消费方进程,消费方通过它来获取到服务提供方的地址。
例如:分配到对应的科之后,每个科还有很多医生,再把病人分配给医生。

前面我们讲解过了80通过轮询负载访问8001/8002
一句话总结就是:负载均衡+RestTemplate调用

负载均衡演示

1)、架构说明
在这里插入图片描述
在这里插入图片描述
总结: Ribbon其实就是一个软负载均衡的客户端组件, 他可以和其他所需请求的客户端结合使用,和eureka结合只是其中一个实例.

2)、Maven依赖
在这里插入图片描述

3)、二说RestTemplate的使用
在这里插入图片描述

核心组件IRule

1)、IRule
根据特定算法从服务列表中选取一个要访问的服务
在这里插入图片描述

2)、轮询方法对应

  • RoundRobinRule 轮询(默认)
  • RandomRule 随机
  • RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务
  • WeightedResponseTimeRule 对RoundRobinRule的扩展,响应速度越快的实例选择权重越多大,越容易被选择
  • BestAvailableRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
  • AvailabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例
  • ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器

3)、替换LB策略为 随机
在这里插入图片描述

负载均衡算法

1)、轮询策略原理
在这里插入图片描述

2)、轮询策略源码
在这里插入图片描述

3)、手写轮询策略
在这里插入图片描述

OpenFeign

服务接口调用
2020-05-20 14:33:03

简介

1)、OpenFeign是什么?
Feign是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可
GitHub地址:https://github.com/spring-cloud/spring-cloud-openfeign

https://cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud-openfeign
在这里插入图片描述

2)、OpenFeign能干嘛?
在这里插入图片描述

3)、Feign与OpenFeign区别?
在这里插入图片描述

OpenFeign入门案例

1)、项目搭建
在这里插入图片描述

2)、访问测试
老样子,先启动7001,7002,再启动8001,8002,再启动 OpenFeign
在这里插入图片描述

OpenFeign超时控制

1)、超时设置,故意设置超时演示出错情况【OpenFeign默认等待1秒钟,超过后报错】

1
2
3
服务提供方8001故意写暂停程序,
服务消费方80添加超时方法PaymentFeignService,
服务消费方80添加超时方法OrderFeignController

在这里插入图片描述
在这里插入图片描述

2)、疑问?
默认Feilgn客户端只等待一秒钟, 但是服务端处理需要超过1秒钟,导致Feign客户端不想等待了,直接返回报错。
为避免这样的情况,有时候我们需要设置Feign客户端的超时控制。

3)、解决办法
OpenFeign默认支持Ribbon,可以在YML文件里需要开启OpenFeign客户端超时控制
在这里插入图片描述

OpenFeign日志打印功能

1)、是什么?
Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。
说白了就是对Feign接口的调用情况进行监控和输出

2)、日志级别

  • NONE:默认的,不显示任何日志;
  • BASIC:仅记录请求方法、URL、 响应状态码及执行时间;
  • HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
  • FULL:(最全)除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

3)、功能实现
在这里插入图片描述

整合其他组件

1)、OpenFeign + Hystrix >>> 05,方法2

2)、OpenFeign + Sentinel >>> 10