Hystrix 源码解读

转载请注明出处:

1.引入依赖:

2. 查看自动配置类HystrixCircuitBreakerConfiguration

查看 org.springframework.cloud.spring-cloud-starter-netflix-hystrix 包中的自动配置类,Hystrix 的断路器的自动配置类在 org.springframework.cloud.netflix.hystrix.HystrixCircuitBreakerConfiguration 类中

3.查看 HystrixCircuitBreakerConfiguration 类的实现

Hystrix 的熔断开启与实现时通过 上面中的 HystrixCommandAspect 类实现的

4.查看 HystrixCommandAspect 类的实现

该切面类中的实现为:

通过代码看出hystrix 通过封装一个切面,在切面中 拦截 对使用了 @HystrixCommand 与 @HystrixCollapser注解的方法进行增强;

重点看这行代码:

是如何创建HystrixCommand对象的。

分析的是HystrixCommand注解,所以走else里的分析。整体构造过程是 GenericCommand -> AbstractHystrixCommand -> HystrixCommand -> AbstractCommand, 构建GenericCommand的过程,我们主要还是看AbstractCommand的构造方法。

5.查看 切面方法实现细节

hystrix 执行的流程图:

6.核心实现

HystrixCommandAspect.methodsAnnotatedWithHystrixCommand 中的execute方法,execute 方法为 hystrix 实现的核心:

判断是否为同步,还是异步,还是观察着模式,异步方式是通过 Future 封装,用Future 对象的get方法,阻塞等待返回结果,以达到同步效果。

在这里只查看同步的方式: 调用链路是:HystrixCommand.execute() -> queue() -> toObservable()

1.是否使用缓存

如果开启缓存,请求首先会返回缓存中的结果。

2.是否开启熔断

当运行hystrix命令时,会判断是否熔断,如果已经熔断,hystrix将不会执行命令,而是直接执行fallback。等熔断关闭了,在执行命令。

熔断器关闭或打开的判断,

接着分析 this.circuitBreaker.allowRequest()

https://www.iocoder.cn/Hystrix/command-execute-mode/

Original: https://www.cnblogs.com/zjdxr-up/p/16339325.html
Author: 香吧香
Title: Hystrix 源码解读

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611479/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Gitlab 403 forbidden 并发引起IP被封

    问题 在工作中自搭建的Gitlab。但今天打开页面的时候显示的是空白页面,上面还有一次文本Forbidden。 原因 Gitlab使用rack_attack做了并发访问的限制。 解…

    Linux 2023年6月14日
    071
  • shell 中的EOF

    EOF是(END Of File)的缩写,表示自定义终止符。既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d 就代表EOF。EOF一般会配合cat能…

    Linux 2023年5月28日
    097
  • 让Mac界面和Windows界面在Laxcus集群操作系统上合体

    如果一套操作系统,同时拥有苹果Mac风格的图形桌面,和微软Windows风格的图形桌面,你会是一种什么样的体验? 最近,我们公司的GUI研发团队完成了这项技术突破,在持续不断地技术…

    Linux 2023年6月6日
    0104
  • JavaScript快速入门-02-基本语法

    2 基本语法 2.1 JavaScript简介 JavaScript 是一门 解释型语言,其代码在客户端中执行前不需经过编译,而是直接由浏览器解释执行。主要用作 客户端脚本语言,在…

    Linux 2023年6月7日
    0103
  • 《分布式系统原理介绍》读书笔记

    1、在大型集群中每日宕机发生的概率为千分之一左右;在实践中,一台宕机的机器恢复时间通常认为是 24 小时。 2、由于网络数据丢失的异常存在,直接决定了分布式系统的协议必须能处理网络…

    Linux 2023年6月16日
    099
  • ASP.NET CORE在docker中的健康检查(healthcheck)

    在使用docker-compose的过程中,很多程序都提供了健康检查(healthcheck)的方法,通过健康检查,应用程序能够在确保其依赖的程序都已经启动的前提下启动,减少各种错…

    Linux 2023年6月6日
    0101
  • 正则表达

    常用表达式 单字符:. : 除换行以外所有字符[] :[aoe] [a-w] 匹配集合中任意一个字符\d :数字 [0-9]\D : 非数字\w :数字、字母、下划线、中文\W :…

    Linux 2023年6月13日
    075
  • 每日好书推荐:《Kali Linux渗透测试的艺术》PDF高清版

    Original: https://www.cnblogs.com/bnn86/p/15344056.htmlAuthor: 测试楠楠君Title: 每日好书推荐:《Kali Li…

    Linux 2023年5月27日
    0103
  • Python3.9.5安装

    基础环境:yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-de…

    Linux 2023年6月6日
    085
  • Python 练习题:用索引取出LIST中的值

    请用索引取出下面list的指定元素,分别为Apple,Python,Lisa -*- coding: utf-8 -*- 请用索引取出下面list的指定元素 L = [ [‘App…

    Linux 2023年6月8日
    089
  • Git 不识别文件名字母大小写变化

    问题 今天为一个项目撰写持续构建计划,撰写 Jenkinsfile 之后进行构建时报错: [2022-05-23 16:54:21] unable to prepare conte…

    Linux 2023年6月7日
    086
  • redis开启远程访问

    redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf 打开redis.conf文件在 NETWORK部分有说明 By default, if no …

    Linux 2023年5月28日
    0142
  • 关于面试的那些事

    这周做了三次的笔试,周日的XXX,周三的XXX,周五的XXX。 首先周日的XXX,考了四道算法题,两个小时,说实话题目都没怎么读懂,算法基本没接触过,结果一道也没有做出来,只想说,…

    Linux 2023年6月7日
    0109
  • php微信分账功能 —— app支付

    /** 微信分账功能 $out_order_no 系统自定义的单号 $transaction_id 微信支付单号 $profitSharingAccounts array 分账接收…

    Linux 2023年6月7日
    083
  • 手把手搭建一个属于自己的在线 IDE

    背景 这几个月在公司内做一个跨前端项目之间共享组件/区块的工程,主要思路就是在 Bit 的基础上进行开发。Bit 主要目的是实现不同项目 共享 与 同步 组件/区块,大致思路如下:…

    Linux 2023年6月14日
    0102
  • 关于网络安全防护架构中的DMZ区

    公司有一个网站群的业务,应用规模比较大,目前计划是从传统的虚拟机部署方式迁移到内部的私有云。 这种迁移的动作是一个很好的学习机会。在交流的时候的时候,领导有提到现有的架构基本上是参…

    Linux 2023年6月14日
    095
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球