介绍
:::tips 不管是线程隔离还是熔断降级,都是对调用方的保护,需要在调用方发起远程调用时做线程隔离、或者服务熔断,而微服务远程调用都是基于Feign来完成的,因此需要将Feign与Sentinel整合,在Feign里面实现线程隔离和服务熔断 :::
添加配置
:::tips 在服务调用方的配置文件中添加配置,开启Feign对Sentinel的支持 :::
feign:
sentinel:
#开启Feign对Sentinel的支持
enabled: true
编写失败降级逻辑
:::tips 熔断后发起请求会失败,我们不能直接报错,应该返回一个友好提示或者默认结果,这个就是失败降级逻辑,有两种实现方式:
- FallbackClass:无法对远程调用的异常做处理
FallbackFactory:可以对远程调用的异常做处理【推荐】 :::
FallbackFactory
:::tips 在Feign微服务项目中定义一个类,然后实现FallbackFactory接口,并指定泛型为需要调用的XxxClient,重写接口的create方法 ::: ```java @Component public class XxxClientFallbackFactory implements FallbackFactory
{ @Override public XxxClient create(Throwable throwable) {
return new XxxClient() {
@Override
public Xxx xxx(Xxx xxx) {
//编写逻辑
//业务调用失败后返回的结果
return xxx;
}
};
}
}
:::tips
然后在Feign微服务项目中的XxxClient接口中指定@FeignClient注解的fallbackFactory属性为上面编写的类名.class
:::
```java
@FeignClient(value = 服务名称, fallbackFactory = XxxClientFallbackFactory.class)
public interface XxxClient {
@GetMapping(value = 请求路径)
public Xxx xxx(Xxx xxx);
}