为了保证制作简历的安全性和流畅性,建议您使用Chrome浏览器进行访问
海盐不喝汽水 南昌大学·2022届
APP 内打开
分享
1
38

关于Spring Cloud

Spring Cloud

Spring Cloud 是什么

集成了多个框架工具,来解决微服务终于到的各种问题:

远程调用(RPC)

负载均衡

重试(容错)

降级

熔断

监控

配置中心

Spring Cloud 是一个框架集,微服务全家桶

Spring Cloud 不是什么

不是一个独立框架

Spring Cloud 和 Dubbo 区别

Dubbo 只解决远程调用,不能解决其他问题 如果遇到其他问题,需要自己研发,或自己集成其他工具。

Spring Cloud 是微服务全家桶,结合Spring Boot来实现“开箱即用”

eureka

Spring Cloud 支持多款注册中心工具:eureka,zookeeper,consul.......

eureka运行机制:

注册 应用启动时,会连接注册中心进行注册。 如果无法连接注册中心,它会一次一次的反复进行注册,直到成功为止。

拉取 每个服务都会从注册中心拉取注册表,每30秒会重新拉取一次注册表进行更新。

心跳 客户端会每30秒向 eureka 注册中心发送一次心跳数据,eureka 连续3次收不到心跳,认为服务已经死掉,会从注册表删除服务。

自我保护模式 是一种特殊情况 由于网络不稳定,造成 85%以上的服务器出现心跳异常,这时会进入自我保护模式,在保护模式下,所有服务都不删除,直到网络恢复,会自动退出自我保护模式。

eureka 和 zookeeper 区别

eureka

强调 AP - 可用性、分区容错性

集群 - 对等结构

zookeeper

强调 CP - 一致性、分区容错性

集群 - 主从结构

RestTemplate

Spring Cloud 使用的一个远程调用工具

(服务之间相互调用)

RestTemplate 是Springboot提供的一个远程调用工具

getForObject("url", 转换类型, 提交的参数)

postForObject("url", 协议体数据, 转换类型)

Ribbon

Ribbon 的作用,解决的问题:

负载均衡(微服务系统必须功能) 访问压力可以分散到多态服务器

重试(不是必须功能) 当第一次请求失败或等待超时,可以自动发起重试请求

Ribbon 负载均衡

ribbon依赖(在 eureka client 中已经包含)

添加 @LoadBalanced注解,用Ribbon封装 RestTemplate 对象,对 RestTemplate功能进行增强

Ribbon 重试

容错

当调用后台服务失败,可以自动重试,如果重试成功,可以向客户端正常返回结果。

添加Ribbon重试:

添加 pring-retry 依赖

设置重试参数:

MaxAutoRetries - 单台服务器的重试次数

MaxAutoRetriesNextServer - 更换服务器的次数

OkToRetryOnAllOperations - 是否对所有类型请求都重试,默认只对 get 重试,如果要对所有请求重试设置成 true

下面两个超时设置不能在 yml 中配置,需要在 java 代码中设置

connectTimeout - 建立连接超时时间

readTimeout - 已建立连接并发送了请求,等待响应的超时时间

Hyxtrix

容错工具

Hystrix提供的容错功能:

降级

熔断

降级

当调用后台服务失败,或超时,可以向客户端返回降级结果 。

快速失败:

客户端不必长时间阻塞等待后台服务结果,超时后可以快速获得反馈。

防止雪崩、防止错误传播

熔断

熔断就像家里的电箱,有一个总闸,如果访问量过大(过热),触发熔断,家里的电路会被断开。

当系统访问量过大,出现大量的失败情况时,会触发熔断,断路器打开后,所有的请求直接执行降级代码返回降级结果。

触发熔断的条件:

10秒内20次请求(必须首先满足)

50%失败,执行了降级代码

添加 Hystrix 降级

hystrix 依赖

添加主程序注解@EnalbleCircuitBreaker,启用 hystrix 断路器,触发断路器自动配置

添加降级代码 复制代码1234@HystrixCommnad(fallbackMethod="降级方法")public void a() {    restTemplate.getForObject("http://.....");}

hystrix 的超时

默认超时时长是1秒

hystrix dashboard

hystrix仪表盘,对hystrix出现错误的情况进行监控

actuator

Springboot 提供的一个项目监控工具,可以监控项目的各种运行数据,hystrx利用actuator,可以添加hystrix的监控数据。

添加 actuator:

actuator依赖

暴露监控数据:

在.yml配置文件中输入即可知晓

复制代码1234567m.e.w.e.i="*"  # 暴露所有的监控数据 m.e.w.e.i=health  # 暴露健康状态数据 m.e.w.e.i=health,beans,env,hystrix.stream # 暴露多种监控数据 m.e.w.e.i=hystrix.stream

搭建仪表盘项目

hystrix仪表盘是一个完全独立的项目,启动后,需要在它的界面上指定监控数据的路径。

新建 hystrix-dashboard 项目

添加 hystrix dashboard 依赖

yml 配置选择端口 4001

主程序添加注解,启用 hystrix dashboard:@EnableHystrixDashboard

Feign

声明式客户端

只需要定义一个抽象的接口,就可以通过接口调用远程服务,不需要写具体调用代码。

例如调用后台商品服务,接口可以这样定义:

复制代码12345@FeignClient(name="item-service")public interface ItemFeignClient {    @GetMapping("/{orderId}")    JsonResult> getItems(@PathVarible String orderId);}

通过注解,配置以下三点:

服务id - 确定调用哪个远程服务

路径 - 调用一个服务的哪个路径

参数 - 向这个路径提交什么参数数据

集成 Ribbon

Feign集成了Ribbon,提供了Ribbon的默认配置。

默认已经启用了负载均衡和重试,0配置就可以使用Ribbon。

重试的默认配置:

MaxAutoRetries: 0

MaxAutoRetriesNextServer: 1

ReadTimeout: 1000

集成 Hystrix

Feign可以集成Hystrix,默认不启用Hystrix,Feign不推荐启用Hystrix(后面再进行分析)。

启用Hystrix,添加基础配置:

添加 Hystrix 完整依赖

yml 配置在Feign中启用hystrix:feign.hystrix.enabled=true

主程序添加 @EntalbeCircuitBreaker

添加降级代码

添加一个单独的降级类,需要实现声明式客户端接口

复制代码123@Component public class ItemFeignClientFB implements ItemFeignClient {    实现降级方法,返回降级响应}

在接口上,还需要指定降级类:

复制代码1234@FeignClient(name="item-service",fallback=降级类)interface ItemFeignClient {     }

添加Hystrix监控

actuator依赖

配置暴露 hystrix.stream 监控端点

复制代码1m.e.w.e.i=hystrix.stream

访问 http://localhost:3001/actuator/hystrix.stream

访问仪表盘,访问上面的监控数据

发布时间:2020年07月30日
用户头像
我来说两句…
共 1 条评论
陌小伊 新南威尔士大学·2022届
2020年07月31日 回复