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

 

posted @ 2020-10-02 23:16  跃小云  阅读(137)  评论(0编辑  收藏  举报