熔断:当下游服务报错不可用时,上游服务为了保证整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源
降级:当下游服务响应过慢或者不可用时,上游服务调用下游服务的降级逻辑,立即返回结果,熔断可以看成是降级的一种形式
降级有如下几种类型:
超时降级失败次数降级故障降级限流降级
参考:
https://blog.csdn.net/Milogenius/article/details/104934611
https://blog.csdn.net/ityouknow/article/details/81230412
解释了降级的概念,可以先看下如下例子:
在 nacos_demo_provider 服务中,http://127.0.0.1:9092/nacos-provider/hello 接口报错
@RestControllerpublic class NacosProviderController { @Value("${server.port}") private String port; @GetMapping(value = "hello") public String hello() { int a = 0; int b = 1 / a; return "hello, i am from " + port; }}
异常为:
java.lang.ArithmeticException: / by zero
nacos_demo_consumer 服务 http://127.0.0.1:9095/nacos-consumer/hello2 接口调用 nacos_demo_provider 服务 http://127.0.0.1:9092/nacos-provider/hello 接口,假设不做降级处理,那么nacos_demo_provider服务异常会直接导致 nacos_demo_consumer 服务对应接口不可用
Hystrix 是 Netflix 公司提供的服务降级框架,Spring Cloud OpenFeign 默认集成了 hystrix,所以引入了spring-cloud-starter-openfeign 依赖就可以使用 hystrix 了。
① 使用 hystrix 前要将openfeign对hystrix支持的开关打开
feign: hystrix: enabled: true
② 配置 @FeignClient 中 fallback 或 fallbackFactory 属性,fallbackFactory 功能更强些,以 fallbackFactory 配置为例
@Component@FeignClient(name = "nacos-provider", path = "nacos-provider", configuration = {FeignClientConfig.class}, fallbackFactory = HystrixClientFallbackFactory.class)public interface NacosProviderService { @RequestMapping(method = RequestMethod.GET, value = "hello") String hello();}
③ 编写降级处理类 HystrixClientFallbackFactory
package com.hs.nacos_demo_consumer;import com.hs.nacos_demo_consumer.service.NacosProviderService;import feign.hystrix.FallbackFactory;import org.springframework.stereotype.Component;@Componentpublic class HystrixClientFallbackFactory implements FallbackFactory
测试: