Feign調(diào)用Hystrix熔斷降級

Feign默認已經(jīng)整合了Hystrix。

一、使用如何使用

單純服務(wù)降級

  • 加配置,默認Feign是不啟用Hystrix的,需要添加配置啟用Hystrix,這樣所有的Feign Client都會受到Hystrix保護!

    feign:
      hystrix:
        enabled: true
    
  • 提供Fallback:

    @FeignClient(name = "student-server", fallback = StudentFeignClientFallback.class)
    public interface StudentFeignClient {
      @GetMapping("/student/{id}")
      User findById(@PathVariable("id") Long id);
    }
    
    @Component
    class StudentFeignClientFallback implements StudentFeignClient {
      @Override
      public User findById(Long id) {
        return new User(id, "小i", "大家好,我是聰明的小i", 8);
      }
    }
    

獲得造成fallback的原因

@FeignClient(name = "student-server", fallbackFactory = StudentFeignClientFallbackFactory.class)
public interface StudentFeignClient {
  @GetMapping("/student/{id}")
  User findById(@PathVariable("id") Long id);
}

@Component
@Slf4j
class UserFeignClientFallbackFactory implements FallbackFactory<UserFeignClient> {
  @Override
  public StudentFeignClient create(Throwable throwable) {
    return new UserFeignClient() {
      @Override
      public User findById(Long id) {
        log.error("進入回退邏輯", throwable);
        return new User(id, "小i", "大家好,我是聰明的小i", 8);
      }
    };
  }
}

通過工廠類獲取Fallback的原因(推薦)

@Component
public class StudentFeignFallBackFactory implements FallbackFactory<StudentFeignClient> {
    @Override
    public StudentFeignClient create(Throwable throwable) {
        StudentFeignClientFallback studentFeign = new StudentFeignClientFallback();
        studentFeign.setCause(throwable);
        return studentFeign;
    }
}

二、開關(guān)配置

Feign啟用/禁用Hystrix

1. 全局啟用
feign.hystrix.enabled: true
2. 全局禁用(默認)
feign.hystrix.enabled: false

局部啟用/禁用Hystrix

在@FeignClient的configuration中配置啟用/禁用的配置類。

@FeignClient(name = "student-server", configuration = FeignDisableHystrixConfiguration.class)
public interface StudentFeignClient {
  @GetMapping("/student/{id}")
  User findById(@PathVariable("id") Long id);
}
1. 局部啟用

利用Feign配置的自定義,為指定Feign Client指定如下配置類即可。

public class FeignDisableHystrixConfiguration {
  @Bean
    @Scope("prototype")
    public HystrixFeign.Builder feignBuilder() {
        return HystrixFeign.builder();
    }
}
2. 局部禁用
public class FeignDisableHystrixConfiguration {
  @Bean
    @Scope("prototype")
    public Feign.Builder feignBuilder() {
        return Feign.builder();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容