在 Spring Cloud Feign 中,除了引入了用户客户端负载均衡的 Spring Cloud Ribbon 之外,还引入了服务保护与容错的工具 Hystrix,默认情况下,Spring Cloud Feign 会为将所有 Feign客户端的方法都封装到 Hystrix 命令中进行服务保护,需要注意的是 Ribbon 的超时与 Hystrix 的超时是二个概念,需要让 Hystrix 的超时时间大于 Ribbon 的超时时间,否则 Hystrix 命令超时后,该命令直接熔断,重试机制就没有意义了。

全局配置

对于 Hystrix 的全局配置同 Spring Cloud Ribbon 的全局配置一样,直接使用他的默认配置前缀 hystrix.command.default 就可以设置,比如,设置全局的超时时间,yml 配置格式如下:

hystrix:

command:

default:

execution:

isolation:

thread:

timeoutInMillisecondes: 5000

在对Hystrix进行配置之前,我们需要确认 feign.hystrix.enabled 参数没有被设置为 false,该参数的含义就是关闭 Feign 客户端的 Hystrix 支持.

禁用 Hystrix

在 Spring Cloud Feign 中,可以通过 feign.hystrix.enabled=false 来关闭Hystrix 功能,如果不想全局关闭 Hystrix 支持,而只想针对某个服务客户端关闭 Hystrix 支持,而要通过使用 @Scope("prototype") 注解为指定的客户端配置 Feign.Builder 实例,实现步骤如下:

  • 构建一个关闭 Hystrix 的配置类:

    @Configurable

    public class DisableHystrixConfiguration {

    @Bean

    @Scope ("prototype")

    public Feign.Builder feignBuilder() {

    return Feign.builder();

    }

    }

  • 在服务的 @FeignClient 注解中,通过 configuration 参数引入上面的配置:

    @FeignClient (value = "ORG.LIXUE.HELLOWORLD", configuration = DisableHystrixConfiguration.class)

    public interface HelloWorldServiceProxy extends HelloWorldService {

    }

指定命令的配置

对于 Hystrix 命令的配置,在实际应用时往往也会根据实际业务情况制定出不同的配置方案,配置方法也跟传统的 Hystrix 命令的参数配置相似,采用 hystrix.command.<commandKey> 作为前缀,而 <commandKey>默认会采用 Feign 客户端中的方法名作为标识,由于方法名很有可能重复,这个时候相同方法名的 Hystrix 配置会共用,所以在进行方法定义与配置的时候需要做好一定的规划,也可以重写 Feign.Builder 的实现,并在应用主类中创建它的实例来覆盖自动化配置的 HystrixFeign.Builder 实现,示例配置如下:

hystrix:

command:

// 默认命令配置

default:

execution:

isolation:

thread:

timeoutInMillisecondes: 5000

tiemout:

enabled: false

// hi 命名配置

hi:

execution:

isolation:

thread:

timeoutInMillisecondes: 50

服务降级配置

Hystrix 提供的服务降级是服务容错的重要功能,由于 Spring Cloud Feign 在定义服务客户端时候与 Spring Cloud Ribbon 有很大差别,HystrxCommand 定义被封装起来了 Spring Cloud Feign 提供了另一种简单的定义方式,服务降级逻辑的实现只需要为Feign 客户端的定义接口编写一个具体的接口实现类,然后通过 @FeignClient 注解的 fallback 属性来指定对应的服务降级实现类即可,示例如下:

  • 定义服务实现的客户端接口,创建 HelloWorldClient 接口,并继承与服务接口 HelloWorldService,增加 @FeignClient 注解,并指定服务名称、fallback设置服务降级实现类(代码在后面)和,代码如下:

    @FeignClient (value = "ORG.LIXUE.HELLOWORLD", configuration=FeignConfig.class,

    fallback = HelloWorldServiceFallback.class)

    public interface HelloWorldClient extends HelloWorldService {

    }

  • 创建服务降级类,继承与 HelloWorldClient 接口,该类不能和应用主类为同包及其子包内,并实现降级业务,代码如下:

    @Component

    public class HelloWorldServiceFallback implements HelloWorldClient {

    @Override

    public String hi() {

    return
    "fallback hi";

    }

    @Override

    public String hi(String name) {

    return
    "fallback hi name=" + name;

    }

    @Override

    public String hi(@RequestBody User user) {

    return
    "fallback hi user=" + user;

    }

    }

  • 创建配置类 FeingConfig ,并在配置类中创建 HelloWorldServiceFallback 类的 Bean,代码如下:

    @Configurable

    public class FeignConfig {

    @Bean

    public HelloWorldServiceFallback helloWorldServiceFallback() {

    return new
    HelloWorldServiceFallback();

    }

    }

  • 测试验证,启动服务注册中心和Feign客户端项目,不启动 ORG.LIXUE.HELLOWORLD 服务项目,访问服务会直接触发服务降级。

笔记:Spring Cloud Feign Hystrix 配置的更多相关文章

  1. Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 实践

    Spring Cloud Feign 自定义配置(重试.拦截与错误码处理) 实践 目录 Spring Cloud Feign 自定义配置(重试.拦截与错误码处理) 实践 引子 FeignClient的 ...

  2. 笔记:Spring Cloud Feign Ribbon 配置

    由于 Spring Cloud Feign 的客户端负载均衡是通过 Spring Cloud Ribbon 实现的,所以我们可以直接通过配置 Ribbon 的客户端的方式来自定义各个服务客户端调用的参 ...

  3. 笔记:Spring Cloud Feign 其他配置

    请求压缩 Spring Cloud Feign 支持对请求与响应进行GZIP压缩,以减少通信过程中的性能损耗,我们只需要通过下面二个参数设置,就能开启请求与响应的压缩功能,yml配置格式如下: fei ...

  4. Spring Cloud Feign Ribbon 配置

    由于 Spring Cloud Feign 的客户端负载均衡是通过 Spring Cloud Ribbon 实现的,所以我们可以直接通过配置 Ribbon 的客户端的方式来自定义各个服务客户端调用的参 ...

  5. Spring Cloud Feign+Hystrix自定义异常处理

    开启Hystrix spring-cloud-dependencies Dalston版本之后,默认Feign对Hystrix的支持默认是关闭的,需要手动开启. feign.hystrix.enabl ...

  6. Spring Cloud Feign 声明式服务调用

    目录 一.Feign是什么? 二.Feign的快速搭建 三.Feign的几种姿态 参数绑定 继承特性 四.其他配置 Ribbon 配置 Hystrix 配置 一.Feign是什么? ​ 通过对前面Sp ...

  7. Spring Cloud中Hystrix、Ribbon及Feign的熔断关系是什么?

    导读 今天和大家聊一聊在Spring Cloud微服务框架实践中,比较核心但是又很容易把人搞得稀里糊涂的一个问题,那就是在Spring Cloud中Hystrix.Ribbon以及Feign它们三者之 ...

  8. 笔记:Spring Cloud Feign 声明式服务调用

    在实际开发中,对于服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以我们通常会针对各个微服务自行封装一些客户端类来包装这些依赖服务的调用,Spring Cloud Feign 在此基础上做了进 ...

  9. Spring Cloud Feign 在调用接口类上,配置熔断 fallback后,输出异常

    Spring Cloud Feign 在调用接口类上,配置熔断 fallback后,出现请求异常时,会进入熔断处理,但是不会抛出异常信息. 经过以下配置,可以抛出异常: 将原有ErrorEncoder ...

随机推荐

  1. Java AES加密案例

    AES加密原理 http://www.blogjava.net/amigoxie/archive/2014/07/06/415503.html PHP 加密 https://segmentfault. ...

  2. Spark SQL 1.3测试

    Spark SQL 1.3 参考官方文档:Spark SQL and DataFrame Guide 概览介绍参考:平易近人.兼容并蓄——Spark SQL 1.3.0概览 DataFrame提供了一 ...

  3. 关于instrinsicContentSize, ContentHuggingPriority, ContentcompressionResistancePriority的理解

    ios 关于intrinsic理解 最近由于项目的需要想给MBProgressHUD添加一个自定义的view, 结果花费了一两个小时也没添加上去,添加上去的view没有实际的大小,即使你给他设置了一个 ...

  4. canvas动画:自由落体运动

    经过前面的文章,我们已经能够在canvas画布上画出各种炫酷的图形和画面,但是这些画面都是禁止的,怎么样才能让他们动起来呢? 如何绘制基本图形可以参考:canvas基本图形绘制 如何对基本图形移动旋转 ...

  5. Canada Cup 2016 D. Contest Balloons

    最近好弱做什么题目都是做一晚上 这是合肥站炼铜后遗症? 这题就是贪心 我已开始还写了1小时---三分-----. #include<bits/stdc++.h> using namespa ...

  6. VMware下载安装及CentOS7下载安装

    我是在Windows10系统下,下载的VMware Workstation 12 1.下载虚拟机软件 安装包位置(里面有激活码):https://pan.baidu.com/s/1i5hn5lj 2. ...

  7. javascript右键菜单分析

    右键菜单 思路 1.遮蔽原来的默认右键菜单 2.新建右键菜单跟随鼠标移动 3.注意边界处的位置变化 4.自定义右键内容的具体效果 具体 这样的事件涉及到有关contextmenu事件,阻止默认事件,获 ...

  8. 数列分块总结——题目总版(hzwer分块九题及其他题目)(分块)

    闲话 莫队算法似乎还是需要一点分块思想的......于是我就先来搞分块啦! 膜拜hzwer学长神犇%%%Orz 这九道题,每一道都堪称经典,强力打Call!点这里进入 算法简述 每一次考试被炸得体无完 ...

  9. 【BZOJ1030】文本生成器(AC自动机,动态规划)

    [BZOJ1030]文本生成器(AC自动机,动态规划) 题面 BZOJ 题解 超级简单良心送分题 很明显是所有状态-不合法状态 合法状态就是\(26^m\) 不合法状态做一个\(dp\)就好 #inc ...

  10. eclipse 启动报内存溢出的问题out of memory!

    这个问题困扰了我一个月,今天终于解决了,在网上尝试了好多方法都不行.启动的时候就报错,这里可能是jdk的内存太小了,需要加大jdk的内存. 加上这个就好了 -server -Xms512m -Xmx5 ...