介绍

:::tips 不管是线程隔离还是熔断降级,都是对调用方的保护,需要在调用方发起远程调用时做线程隔离、或者服务熔断,而微服务远程调用都是基于Feign来完成的,因此需要将Feign与Sentinel整合,在Feign里面实现线程隔离和服务熔断 :::

添加配置

:::tips 在服务调用方的配置文件中添加配置,开启Feign对Sentinel的支持 :::

  1. feign:
  2. sentinel:
  3. #开启Feign对Sentinel的支持
  4. enabled: true

编写失败降级逻辑

:::tips 熔断后发起请求会失败,我们不能直接报错,应该返回一个友好提示或者默认结果,这个就是失败降级逻辑,有两种实现方式:

  • FallbackClass:无法对远程调用的异常做处理
  • FallbackFactory:可以对远程调用的异常做处理【推荐】 :::

    FallbackFactory

    :::tips 在Feign微服务项目中定义一个类,然后实现FallbackFactory接口,并指定泛型为需要调用的XxxClient,重写接口的create方法 ::: ```java @Component public class XxxClientFallbackFactory implements FallbackFactory {

    @Override public XxxClient create(Throwable throwable) {

    1. return new XxxClient() {
    2. @Override
    3. public Xxx xxx(Xxx xxx) {
    4. //编写逻辑
    5. //业务调用失败后返回的结果
    6. return xxx;
    7. }
    8. };

    }

}

  1. :::tips
  2. 然后在Feign微服务项目中的XxxClient接口中指定@FeignClient注解的fallbackFactory属性为上面编写的类名.class
  3. :::
  4. ```java
  5. @FeignClient(value = 服务名称, fallbackFactory = XxxClientFallbackFactory.class)
  6. public interface XxxClient {
  7. @GetMapping(value = 请求路径)
  8. public Xxx xxx(Xxx xxx);
  9. }