Spring Cloud 系列之Hystrix、Ribbon、Feign 源码剖析(一)引子
系列目录
Spring Cloud 系列之Hystrix、Ribbon、Feign 源码剖析(一)引子
Spring Cloud 系列之Hystrix、Ribbon、Feign 源码剖析(二)原理概括
Spring Cloud 系列之Hystrix、Ribbon、Feign 源码剖析(三)源码详解
Spring Cloud 系列之Hystrix、Ribbon、Feign 源码剖析(四)总结提高
一、引子
前几天线上服务出现调用失败,架构是spring cloud Greenwich.SR4版本。线上日志排查后发现:feign client调用微服务一秒就自动超时失败。上网搜了一下,说hystrix默认超时配置就是1秒,加了如下配置,问题解决:
#Feign
#使用apahce httpclient 连接池
feign:
httpclient:
enabled: true
hystrix:
enabled: true #超时处理
hystrix:
command:
default:
execution:
isolation:
strategy: SEMAPHORE
thread:
timeoutInMilliseconds: 30000 # 全局ribbion超时配置
ribbon:
ConnectTimeout: 10000
ReadTimeout: 10000
如上图所示:
1.feign.hystrix.enabled=true 代表开启熔断器
2.hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=30000 熔断器超时毫秒数,30秒(默认1000)
公式如下:
Hystrix的超时时间=Ribbon的重试次数(包含首次) * (ribbon.ReadTimeout + ribbon.ConnectTimeout)
这个超时,有什么官方佐证呢?
查询 spring cloud官网后,找到如下一段:

翻译如下:
hystrix超时>ribbon超时(包含潜在的重试时间),例如ribbon连接超时1秒,重试3次,所以Hystrix超时必须>3秒
至此,我们知道:
1.hystrix默认超时1秒。
2.hystrix超时>ribbon超时
问题来了:怎么得知是1秒的???
二、解决步骤
揭露一下我的解决问题步骤,希望能给大家带来一点解决问题的思路。
咱们采用三步骤:发现问题、分析问题、解决问题。
2.1 发现问题
这里无非2个重点:
- 使用spring cloud 全家桶,hystrix、ribbon、feign调用的原理清晰吗?
- yml中的配置有哪些?使用的默认配置了解么?
2.2 分析问题
- 原理可以通过官方文档+源码(代码都是开源的)。没看懂?懒得看?现在源码级别的博客越来越少,大家浮躁的连博客都是抄袭的了...
- 怎么得知具体有哪些配置?无头绪!!!
结束了吗?
经过阅读官方文档,发现Spring boot所有的jar包,yml自动补全配置在:spring-configuration-metadata.json或者additional-spring-configuration-metadata.json。前者是编译时自动生成的,后者是手动自定义的。后者可覆盖前者。(但是这也只是部分配置!!!大量细节配置在源码中!!!聊胜于无吧!!!)
如下图:

具体看一下additional-spring-configuration-metadata.json内容如下:

如上图:
feign.hysgtrix.enabled 如果为true,开启hystrix熔断器。默认为false,不开启。
feign.httpclient.enabled 开启使用apache http client 连接池,默认开启。
问题来了,并没发现第一节的配置。
老老实实地阅读源码后:
在hysyrix-core-1.5.18.jar(在spring-cloud-starter-netflix-hystrix:2.1.4.RELEASE中 )中终于发现了配置类HystrixCommandProperties,中有一段默认配置 key=hystrix(propertyPrefix配置key前缀)+execution.isolation.thread.timeoutInMilliseconds

default_executionTimeoutInMilliseconds默认超时时间毫秒数=1000ms=1S

果然是默认1秒,终于实锤了。我们来看一下这个配置的注释,彻底解密一下,如下图:

如上图,实际业务执行时,取超时时间,就是取的executionTimeoutInMilliseconds这个属性。并且从1.4.0开始,超时不仅支持thread-isolated线程隔离,也支持semaphore-isolated信号量隔离。关于Hystrix的2种模式,Thread和Semaphore,后续章节会慢慢分析。
2.3 解决问题
本系列文章就是一次解决问题的实践。通过阅读官方文档+源码,彻底摸清Spring Cloud Hystrix+Ribbon+Feign的老底儿。后续章节,就是我们一步步解决问题的过程。
再次重申,技术容不得偷懒!!!
Spring Cloud 系列之Hystrix、Ribbon、Feign 源码剖析(一)引子的更多相关文章
- 微服务架构 | *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)
目录 前言 1. Spring Cloud 什么时候加载配置文件 2. 准备 Environment 配置环境 2.1 配置 Environment 环境 SpringApplication.prep ...
- spring cloud 系列第4篇 —— feign 声明式服务调用 (F版本)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.feign 简介 在上一个用例中,我们使用ribbon+restTem ...
- 架构师入门:Spring Cloud系列,Hystrix与Eureka的整合
和Ribbon等组件一样,在项目中,Hystrix一般不会单独出现,而是会和Eureka等组件配套出现.在Hystrix和Eureka整合后的框架里,一般会用到Hystrix的断路器以及合并请求等特性 ...
- SpringCloud学习笔记(14)----Spring Cloud Netflix之Hystrix对Feign的支持
1. Hystrix对Feign的支持 添加Feign中IUserBiz的实现类HystrixFallBack: package com.wangx.cloud.springcloud02consum ...
- Spring Cloud系列文,Feign整合Ribbon和Hysrix
在本博客之前的Spring Cloud系列里,我们讲述了Feign的基本用法,这里我们将讲述下Feign整合Ribbon实现负载均衡以及整合Hystrix实现断路保护效果的方式. 1 准备Eureka ...
- drf源码剖析系列(系列目录)
drf源码剖析系列(系列目录) 01 drf源码剖析之restful规范 02 drf源码剖析之快速了解drf 03 drf源码剖析之视图 04 drf源码剖析之版本 05 drf源码剖析之认证 06 ...
- flask源码剖析系列(系列目录)
flask源码剖析系列(系列目录) 01 flask源码剖析之werkzurg 了解wsgi 02 flask源码剖析之flask快速使用 03 flask源码剖析之threading.local和高 ...
- spring cloud 2.x版本 Ribbon服务发现教程(内含集成Hystrix熔断机制)
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 前言 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 ...
- Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题? Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解 ...
- Spring Cloud系列(三):Eureka源码解析之服务端
一.自动装配 1.根据自动装配原理(详见:Spring Boot系列(二):Spring Boot自动装配原理解析),找到spring-cloud-starter-netflix-eureka-ser ...
随机推荐
- TienChin 渠道管理-字典原理分析
在上一节当中,我们使用到了字典来进行翻译我们的渠道类型等等字段,那么这一节我们就来分析一下字典的原理. 从代码方面先开始分析,我们先来看一下字典的定义,我们是在如下图当中编写了我们的渠道类型,使用,p ...
- net8来了
11 月 15 日开始的为期三天的 .NET Conf 在线活动的开幕日上,.NET 8作为微软的开源跨平台开发平台正式发布..NET 团队着重强调云.性能.全栈 Blazor.AI 和 .NET M ...
- 分布式压测之locust和Jmeter的使用
受限于单台机器的配置问题,我们在单台机器上达不到一个很高的压测并发数,那这个时候就需要引入分布式压测 分布式压测原理: 一般通过局域网把不同测试计算机链接到一起,达到测试共享.分散操作.集中管理的目的 ...
- 小知识:安装系统后唯独搜不到自己的Wi-Fi
遇到的问题,笔记本在安装Win10系统后在可用Wi-Fi热点中唯独搜不到自己的Wi-Fi. 咨询宽带售后的技术人员,说可能是因为我目前使用的是Wi-Fi 6,而我的笔记本可能是网卡过旧,不支持Wi-F ...
- Delphi批量替换工具Cnpack
操,delphi官方 没有 批量替换工具,需要用到cnpack才可以,
- SP28304 ADATEAMS - Ada and Teams 题解
题目传送门 前置知识 乘法逆元 | 排列组合 解法 简单的排列组合.从 \(n\) 个学校中选出 \(a\) 个学校,共有 \(\dbinom{n}{a}\) 种不同的方案数.选出的 \(a\) 个学 ...
- NC15557 连续区间的最大公约数
题目链接 题目 题目描述 给一个数列共n(n<=100,000)个数,a1,a2,...,an.(0<=ai<=1000,000,000).有q(q<=100,000)个询问. ...
- Ubuntu下SSH管理及SFTP下载工具Muon(Snowflake)
简介 Muon其实更像是一个基于ssh的服务器管理工具, 界面中有PAC Manager的影子, 集成了文件管理, ssh命令行, 服务器性能监测和工具包等功能. 因为这个工具的编写语言是Java, ...
- Java操作EasyExcel实现导入导出入门
介绍 EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单.节省内存著称.EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从 ...
- 【Android逆向】某小说网站签名破解
1. 豌豆荚下载v5.4的版本 2. 参考前面两篇文章进行反编译和重打包后,安装到手机发现会有验签失败的报错 抓取log 03-29 16:15:37.545 25910 26539 D KM-NAT ...