SpringCloud Feign 服务调用组件2:使用断路器 Hystrix

原创
2021/07/11 01:16
阅读数 68

在 Spring Cloud Feign 中,除了引入了用于客户端负载均衡的 Spring Cloud Ribbon 之外,还引入了服务保护与容错的工具 Hystrix。

 

一、准备工作

请参考:Spring Cloud Feign 服务调用组件1:使用负载均衡 Ribbon

我们基于参考文章项目进行改造。

 

二、开启 Hystrix 断路器

编辑项目的 application.properites 文件,添加如下相关配置:

#开启Hystrix支持
feign.hystrix.enabled=true

如果需要关闭可以设置为 false。还可以关闭某个服务客户端 Hystrix 支持。通过使用 @Scope("prototype") 注解为指定的客户端配置 Feign.Builder 实例。

@Configuration
public class DisableHystrixConfiguration {
 
    @Bean
    @Scope("propotype")
    public Feign.Builder feignBuilder() {
        return Feign.builder();
    }
}

我们可以通过 configuration 参数引入上面实现的配置来关闭 Hystrix 支持。

@FeignClient(name = "piao-client", configuration = DisableHystrixConfiguration.class)
public interface ConsumerService {

    @RequestMapping("/client")
    String client();

    @RequestMapping("/param")
    String param(@RequestParam String param);

}

 

三、超时配置

使用 Hystrix 的默认配置前缀 hystrix.command.default 配置。

全局配置:

#设置全局的超时时间为5秒
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000

指定方法配置:

使用 hystrlx.command.<commandKey> 作为前缀。而 <commandKey> 默认情况下会采用 Feign 客户端中的方法名作为标识。这里我使用一下这个方法来编写配置示例。

由于方法名很有可能重复,这个时候相同方法名的 Hystrix 配置会共用,所以在进行方法定义与配置的时候需要做好一定的规划。也可以重写 Feign.Builder 的实现,并在应用主类中创建它的实例来覆盖自动化配置的 HystrixFeign.Builder 实现。

#设置/hello接口的超时时间为5秒
hystrix.command.param.execution.isolation.thread.timeoutInMilliseconds=5000

 

四、服务降级配置

Feign 的服务降级很假单,是通过 @FeignClient 注解的 fallback 属性来指定对应的服务降级实现类。

4.1、编写服务降级实现类

public class ConsumerHystrix implements ConsumerService {

    @Override
    public String client() {
        return "client is error";
    }

    @Override
    public String param(String param) {
        return "param is error";
    }
}

 

4.2、指定服务降级实现类

@FeignClient(name = "piao-client", fallback = ConsumerHystrix.class)
public interface ConsumerService {

    @RequestMapping("/client")
    String client();

    @RequestMapping("/param")
    String param(@RequestParam String param);

}

 

4.3、启动应用

我们访问注册中心地址:http://127.0.0.1:2000/

这里我们只启动 Feign 客户端一个服务,所谓消费者无法调用服务提供者,因此会抛出异常。

访问地址:http://127.0.0.1:2007/consumer

访问地址:http://127.0.0.1:2007/param?param=piao

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部