博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java B2B2C多用户商城 springcloud架构-hystrix工作原理
阅读量:6292 次
发布时间:2019-06-22

本文共 1190 字,大约阅读时间需要 3 分钟。

hot3.png

Hystrix是Netflix开源的一个限流熔断的项目、主要有以下功能:需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六

隔离(线程池隔离和信号量隔离):限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。 优雅的降级机制:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。

融断:当失败率达到阀值自动触发降级(如因网络故障/超时造成的失败率高),熔断器触发的快速失败会进行快速恢复。

缓存:提供了请求缓存、请求合并实现。支持实时监控、报警、控制(修改配置)

下面是他的工作流程:

 

Hystrix主要有4种调用方式:

toObservable() 方法 :未做订阅,只是返回一个Observable 。

observe() 方法 :调用 #toObservable() 方法,并向 Observable 注册 rx.subjects.ReplaySubject 发起订阅。

queue() 方法 :调用 #toObservable() 方法的基础上,调用:Observable#toBlocking() 和 BlockingObservable#toFuture()

返回 Future 对象

execute() 方法 :调用 #queue() 方法的基础上,调用 Future#get() 方法,同步返回 #run() 的执行结果。

主要的执行逻辑:

1.每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中.

2.执行execute()/queue做同步或异步调用.

3.判断熔断器(circuit-breaker)是否打开,如果打开跳到步骤8,进行降级策略,如果关闭进入步骤.

4.判断线程池/队列/信号量是否跑满,如果跑满进入降级步骤8,否则继续后续步骤.

5.调用HystrixCommand的run方法.运行依赖逻辑

依赖逻辑调用超时,进入步骤8.

6.判断逻辑是否调用成功。返回成功调用结果;调用出错,进入步骤8.

7.计算熔断器状态,所有的运行状态(成功, 失败, 拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态.

8.getFallback()降级逻辑。以下四种情况将触发getFallback调用:

run()方法抛出非HystrixBadRequestException异常。

run()方法调用超时

熔断器开启拦截调用

线程池/队列/信号量是否跑满

没有实现getFallback的Command将直接抛出异常,fallback降级逻辑调用成功直接返回,降级逻辑调用失败抛出异常.

9.返回执行成功结果

转载于:https://my.oschina.net/u/3873725/blog/3024033

你可能感兴趣的文章
Redhat as5安装Mysql5.0.28
查看>>
通过TMG发布ActiveSync
查看>>
Web服务器的配置与管理(4) 配置访问权限和安全
查看>>
ClientScriptManager与ScriptManager向客户端注册脚本的区别
查看>>
js和php中几种生成验证码的方式
查看>>
android UI进阶之仿iphone的tab效果1
查看>>
这是我的第1个C#程序(向控制台输出一句话)
查看>>
html
查看>>
Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第三部分:SqlField)
查看>>
Python模块学习:threading 多线程控制和处理
查看>>
第一章 企业项目开发--maven+springmvc+spring+mybatis+velocity整合
查看>>
bLock 回调 就是这么简单!
查看>>
HTML5 input placeholder 颜色 改动
查看>>
【转】Spring 4.x实现Restful web service
查看>>
第三十一篇:SOUI布局之相对于特定兄弟窗口
查看>>
分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)...
查看>>
Spring MVC (Java),强制页面不缓存
查看>>
javascirpt 用英文逗号替换英文分号、中英文逗号或者回车
查看>>
LeetCode --- 57. Insert Interval
查看>>
微信支付curl出错及错误码解决方案
查看>>