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