ribbon
ribbon 提供了负载均衡和重试功能, 它底层是使用 RestTemplate 进行 Rest api 调用
RestTemplate
RestTemplate是SpringBoot提供的一个Rest远程调用工具
它的常用方法:
getForObject() 执行get请求
postForObject() 执行post请求
ribbon负载均衡和重试
Ribbon负载均衡
RestTemplate 设置 @LoadBalanced
@LoadBalanced
负载均衡注解,会对 RestTemplate
实例进行封装,创建动态代理对象,并切入(AOP)负载均衡代码,把请求分发到集群中的服务器
ribbon重试
1.添加spring-retry依赖
2.ribbon:
MaxAutoRetriesNextServer: 2
MaxAutoRetries: 1
OkToRetryOnAllOperations: trueOkToRetryOnAllOperations=true
默认只对GET请求重试, 当设置为true时, 对POST等所有类型请求都重试MaxAutoRetriesNextServer
更换实例的次数MaxAutoRetries
当前实例重试次数,尝试失败会更换下一个实例
Hystrix断路器
微服务宕机时,ribbon无法转发请求
添加hystrix依赖
修改application.yml
string:
application:
name: hystrix
主程序添加 @EnableCircuitBreaker启用hystrix断路器
启动断路器,断路器提供两个核心功能:
- 降级,超时、出错、不可到达时,对服务降级,返回错误信息或者是缓存数据
- 熔断,当服务压力过大,错误比例过多时,熔断所有请求,所有请求直接降级
- 可以使用
@SpringCloudApplication
注解代替三个注解
在contller中添加降级方法例如getItems()中添加getItemsFB()
添加 @HystrixCommand
注解,指定降级方法名
hystrix超时设置
hystrix等待超时后, 会执行降级代码, 快速向客户端返回降级结果, 默认超时时间是1000毫秒
为了测试 hystrix 降级,我们把 hystrix 等待超时设置得非常小(500毫秒)
此设置一般应大于 ribbon 的重试超时时长,例如 10 秒
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 500
hystrix dashboard断路器仪表盘
hystrix 对请求的降级和熔断,可以产生监控信息,hystrix dashboard可以实时的进行监控
actuator 是 spring boot 提供的服务监控工具,提供了各种监控信息的监控端点
management.endpoints.web.exposure.include
配置选项,
可以指定端点名,来暴露监控端点
如果要暴露所有端点,可以用 “*”
1.添加autuator依赖
2.management:
endpoints:
web:
exposure:
include: hystrix.stream
访问actuator路径 查看监控端点
http://localhost:端口号/actuator
Hystrix dashboard仪表盘
1.添加依赖 Hystrix Dashboard
和Eureka Discovery Client
2.yml配置
hystrix:
dashboard:
proxy-stream-allow-list: localhost
3.主程序添加### @EnableHystrixDashboard
和 @EnableDiscoveryClient
hystrix熔断
整个链路达到一定的阈值,默认情况下,10秒内产生20次请求,则符合第一个条件,满足第一个条件的情况下,如果请求的错误百分比大于阈值,则会打开断路器,默认为50%。
Hystrix的逻辑,先判断是否满足第一个条件,再判断第二个条件,如果两个条件都满足,则会开启断路器
断路器打开 5 秒后,会处于半开状态,会尝试转发请求,如果仍然失败,保持打开状态,如果成功,则关闭断路
使用apache的并发访问测试工具ab
用 ab 工具,以并发50次,来发送20000个请求
ab -n 20000 -c 50http://localhost:3001/item-service/35
断路器状态为open,所有请求会被短路,直接降级执行fallback方法
hystrix配置
hystrix.command.default.execution.isolation.thread.timeoutInmilliseconds
请求超时时间,超时后,出发失败降级
hystrix.command.default.circuitBreaker.requestVolumeThreshold
10秒内请求数量,默认20,如果没有达到该数量,即使请求全部失败,也不会触发3断路器打开
hystrix.command.default.circuiBreaker.errorThresholdPercentage
失败请求百分比,达到该比例则触发断路器打开
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds
断路器打开多长时间后,再次允许尝试访问(半开),仍失败则继续保持打开状态,如果成功访问则关闭断路器,默认5000
源码: https://github.com/benwang6/spring-cloud-repo
feign声明式客户端接口
微服务应用中,ribbon和hystrix总是同时出现,feign整合了两者,并提供了声明式消费者客户端
1.添加依赖
主程序添加@EnableDiscoveryClient和@EnablefeignClient
feign声明式客户端
如果请求参数名与方法参数名不同@RequestParam
不能省略,并且要指定请求参数名:
@RequestParam("score") Integer s
feign+ribbon 负载均衡和重试
无需额外配置,feign默认已启用了ribbon负载均衡和重试机制,可以通过配置对参数进行调整
yml配置ribbon超时和重试
ribbon.xxx全局配置
item-service.ribbon.xxx 对特定服务实例的配置
feign+hystrix降级
feign默认没有启用hystrix,添加配置,启用hystrix
feign.hystrix.enabled=true
可以添加配置,暂时减小降级超时时间,以便后续对降级进行测试
feign+hystrix监控和熔断测试
配置actuator 暴露htstrix.stream监控端点
yml暴露hystrix.stream端点
Feign集成Hystrix
默认不启用Hystrix,Feign不推荐启用hystrix
如果有特殊需求要启用hystrix,首先做基础配置
1.添加hystrix的完整依赖
2.添加@EnableCircuiBreaker
3.yml配置feign.hystrix.enabled=true
降级
在声明式客户端接口的注解中,指定一个降级类
降级类要作为声明式客户端接口的子类来定义
hystrix监控
用actuator暴露hystrix.stream监控端点
1.actuator依赖
2.暴露监控端点
m.e.w.e.i=hystrix.stream
3.http://localhost:3001/actuator/hystrix.stream
4.通过调用后台服务,
监控代码 ab -n 20000 -c 10 http:localhost:3001/user-service/7
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。