SpringBoot与SpringCloud对应版本关系
所用到的项目,请参考这里
微服务架构图
自动热部署
1)、添加到你的模块中
1 | <dependency> |
2)、下面配置我们粘贴进聚合父类总工程的pom.xml里
1 | <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是一个分布式协调工具,可以实现注册中心功能
下面来使用SpringCloud整合Zookeeper替代Eureka
2020-05-19 15:29:12
环境搭建
3)、关闭防火墙
提供者8004
1)、测试1,浏览器服务测试
2)、测试2,进入zk客户端查看实例
3)、问题:服务节点是临时节点还是持久节点?
答:临时节点
消费者80
POM文件的依赖同提供者8004
1)、搭建
2)、测试
Consul
服务注册与发现
2020-05-19 15:31:40
简介
1)、Consul是什么?
2)、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图
注册中心 CAP对比
2022-06-18 21:52:20 补
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 | 服务提供方8001故意写暂停程序, |
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)、功能实现