SpringCloud详解 第四章声明式服务调用 Feign(三)
本章梳理Feign的Hystrix配置
一、全局配置
如何在使用Spring Cloud Feign时配置Hystrix属性以及如何实现服务降级。
对于Hystrix的全局配置同Spring Cloud Ribbon的全局配置一样,直接使用它的默认配 置前缀hystrix. command. def ault就可以进行设置,比如设置全局的超时时间:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000
二、禁用Hystrix
在Spring Cloud Feign中,可以通过feign. hystrix. enabled=false来关闭Hystrix功能。另外,如果不想全局地关闭Hystrix支持,而只想 针对某个服务客户端关闭Hystrix支持时,需要通过使用@Scope ("prototypen)注解为 指定的客户端配置Feign.Builder实例,详细实现步骤如下所示。
•构建一个关闭Hystrix的配置类。
@Configuration public class DisableHystrixConfiguration { @Bean @Scope ("prototype") , public Feign.Builder feignBuilder() ( return Feign.builder(); } }
•在 HelloService 的QFeignClient 注解中,通过 configuration 参数引入上 面实现的配置。
@FeignClient (name=|HELLO - SERVICE11, configuration = DisableHystrixConfiguration. class)
public interface HelloService {。。。}
三、指定命令配置
对于Hystrix命令的配置,在实际应用时往往也会根据实际业务情况制定岀不同的配置 方案。配置方法也跟传统的Hystrix命令的参数配置相似,釆用hystrix. command. <commandKey>作为前缀。而<commandKey>默认情况下会釆用Feign客户端中的方法名 作为标识,所以,针对上一节介绍的尝试机制中对/hen。接口的熔断超时时间的配置可以通过其方法名作为<commandKey>来进行配置,具
体如下:
hystrix.command.hello.execution.isolation.thread.timeoutInMilliseconds=5000
在使用指定命令配置的时候,需要注意,由于方法名很有可能重复,这个时候相同方 法名的Hystrix配置会共用,所以在进行方法定义与配置的时候需要做好一定的规划。当然, 也可以重写Feign.Builder的实现,并在应用主类中创建它的实例来覆盖自动化配置的 HystrixFeign. Builder
四、服务降级配置
整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开起会来。所谓降级,一般是从整体负荷考虑,就是当某个服务熔断后,服务器将不再被调用,此时客户端可以准备自己本地的一个fallback回调,返回一个缺省值,这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强,服务降级是在客户端进行的.
1. 根据目标接口,创建一个实现了FallbackFactory的类
@Component public class HystrixClientService implements FallbackFactory<ClientService> { @Override public ClientService create(Throwable throwable) { return new ClientService() { @Override public String hello() { return "服务降级。。。。"; } }; } }
2. 在目标接口上的@FeignClient中添加fallbackFactory属性值
@FeignClient(value ="cloud-provider", fallbackFactory = HystrixClientService.class) public interface ClientService { @RequestMapping(value ="/hello",method= RequestMethod.GET) String hello() ; }
3.修改 application.yml ,添加一下
feign: hystrix: enabled: true //开启或关闭hystrix