将hystrix整合至spring cloud feign实现容错处理

Posted 燕山雷震子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将hystrix整合至spring cloud feign实现容错处理相关的知识,希望对你有一定的参考价值。

    提及hystrix相信在做看官不会陌生,它是netflix针对微服务提供的熔断保护中间件,在分布式环境中,多个服务依赖项中的一些会发生失败,严重时会造成系统瘫痪,如一个基础服务的接口因为网络抖动调用失败,调用它的聚合关联服务处理失败,进而导致跨服务的聚合服务调用也是处理失败,如果系统中存在重试时,会一直消耗系统资源,最红将cpu全部打满,进而导致整个系统宕掉,这不是我们所期望的,好在我们有hystrix,使用hystrix添加延迟容忍和容错逻辑,帮助实现这些分布式调用失败是可控,可以阻止此种连锁瘫痪,下面让我们来实践feign与hystrix的整合;


feign+hytrix



·添加eurekaclient、feign、hystrix依赖,在属性配置文件中添加feign对hystrix的支持:


feign.hystrix.enabled=true


·为需要配置hystrix回退处理的feignclient创建接口,在@feignclient中指定fallback的处理类;


@FeignClient (

    value = "eureka-client-user-service", 

    fallback = UserRemoteClientFallback.class) 

public interface UserRemoteClient { 

     @GetMapping("/user/hello") 

     String hello();

 }


·fallback属性指定的处理类需要实现feign接口中所有方法,返回回退时的内容:


@Component

public class UserRemoteClientFallback implements UserRemoteClient { 

     @Override 

     public String hello() {        return "fail";    }

 }


    通过上述配置处理,在调用服务接口出现异常时会触发回退,返回fallback属性指定类的返回结果,如果此时将hystrix断路器禁用 feign.hystrix.enabled=false,此时在访问接口会直接获得服务器500的错误,即整个请求失败,如果期望在回退时获取回退的原因,需要采用fallbackfactory的方式来打印错误信息;


feign中禁用hystrix



    feign中禁用hystrix有两种方式,一种在属性文件中全部禁用,默认情况下即为禁用:feign.hystrix.enabled=false,另一种为通过代码配置方式禁用某个客户端,将下列代码配置添加在具体的feignclient接口属性即可:

@Configuration 

public class FeignConfiguration { 

    @Bean    @Scope("prototype") 

     public Feign.Builder feignBuilder() { 

         return Feign.builder(); 

     }

 }


结语



    今天的分享就到这里,我是雷记,专注于分享关于开发编程相关的技术干货,如果今日的分享对您有帮助的话,还望不吝关注点赞,这对我很重要!如果各位在开发过程中遇到棘手问题,可以扫描下图二维码加入,和雷记与其他小伙伴一起探讨解决,让我们努力让每一个问题都得到解决!

    






以上是关于将hystrix整合至spring cloud feign实现容错处理的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Feign 整合 Hystrix

Spring Cloud(Dalston.SR5)--Feign 与 Hystrix 断路器整合

spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?

Spring Cloud整合Sentinel

Spring Cloud教程——Hystrix(F版本)

spring Cloud-Hystrix 进行服务保护