p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Hannotate SC" }
span.s1 { }
Hystrix命令(HystrixCommand)封装用户请求方法,对用户调用进行隔离。HystrixCommand在执行用户请求时,会首先HystrixCircuitBreaker进行熔断判断,
如果请求已经被熔断了,直接返回定义的错误信息,如果没有被熔断,调用请求。在执行的各个过程,记录调用的超时和异常,HystrixCircuitBreaker记录调用的超时和异常对请求进行熔断。
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px SimSun }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px "Times New Roman" }
li.li1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px SimSun }
li.li2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px "Times New Roman" }
span.s1 { }
span.s2 { font: 10.5px SimSun }
span.s3 { font: 12.0px Helvetica }
span.s4 { font: 10.5px "Times New Roman" }
span.Apple-tab-span { white-space: pre }
ol.ol1 { list-style-type: decimal }
ol.ol2 { list-style-type: lower-alpha }
ol.ol3 { list-style-type: lower-roman }
熔断器(HystrixCircuitBreaker)执行过程如下:
熔断器(HystrixCircuitBreaker)首先会去判断熔断配置是否开启。
- 如果未开启,则执行命令。
- 如果开启,熔断器会判断是否短路,(默认为非短路),
- 如果未短路则执行命令。
- 熔断器会通过HystrixCommandMetrics,判断改命令调用的错误次数是否达到上限或者总调用次数是否达到上限。
- 如果达到上限,设置熔断器为短路,拒绝执行。
- 如果未达到上限,执行命令。
- 如果短路,判断当前时间是否超过短路窗口期,
- 如果没有超过,拒绝执行。
- 如果超过则允许请求执行。 如果请求执行成功,解除熔断,如果请求执行失败,并重新计算短路窗口期(记录当前时间)。