服务降级、熔断
1.服务降级
1.1 什么是服务降级
服务提供方由于网络原因,服务器原因,程序问题等等,导致服务不可用,响应缓慢,服务崩溃宕机。
这时,为了较好的用户体验,需要进行服务降级,在出现问题时,返回又好消息,如返回一个提示信息:当期网络波动,请稍后再试。
从而避免程序报错返回500,影响体验。
1.2 怎么解决
1.yml增加配置
feign:
hystrix:
enabled: true
2. 启动类增加注解
@EnableHystrix
3. 编写服务降级接口,实现类
实现效果
fallbackMethod方法(服务兜底)实现降级:
服务熔断
- 什么是服务熔断
熔断机制是应对雪崩效应的一种微服务链路保护机制,当扇出链路的某个微服务出差不可用,或者响应时间太长时,会进行服务降级,进而熔断改节点微服务的调用,快速返回错误的响应信息。
当检测到该节点微服务调用响应正常后,恢复调用链路。
服务降级-->服务熔断-->恢复调用链路
- 实操服务熔断
@HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = {
@HystrixProperty(name = "circuitBreaker.enabled",value = "true"),// 是否开启断路器
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),// 请求次数
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"), // 时间窗口期
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"),// 失败率达到多少后跳闸
})
3. 实现效果
当传入id为正数,接口正常
当传入id为负数,抛出异常,进入降级方法
多次使用负数请求接口后,接口失败次数超过设置的60%,触发熔断,此时再用正数请求接口。
如下图,可以看出,熔断已开启,入参为正数也返回该错误信息。
再次使用正数调用接口,发现接口慢慢恢复正常。