Cloud 之Hystrix

Hystrix是社么?

 

 

 

Hystrix是对分布式系统下的服务进行 服务降级。服务熔断,服务限流的工具。

Hystrix用在哪里了?怎么用的?

什么是服务降级呢?

看上图。

(即服务系统不可用了。错误方式: 返回异常给客户端,返回错误界面,返回错误标签等等。正确方式:需要包装一下,给一个良好的返回,或者说给一个人性化的兜底的解决办法。)

 什么时候会发生服务降级呢?

1.服务运行异常

2.超时。

3服务熔断发生的服务降级。

4.线程池 /信号量打满导致服务降级。

服务熔断:相当于保 险丝功能。如当服务发生最大访问后,直接拒绝访问。然后调用服务降级的方法返回。

服务熔断一般有3步骤 :不能用了,降级,进保险丝断电  ,然后你原本用了8个大功率用电器,砍掉2个,发现在它的用电范围内,就会慢慢恢复调用链路,提供服务。

hystrix 在服务端和客户端都能用,但是一般用在客户端。

方法1.服务端 hystrix 的使用:

在方法上加入 @HystrixCommand(fallbackMethod = "paymentInfo_timeoutHandler",commandProperties = {@HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value = "1000")})
//上面的表达式表示设置方法的默认超时时间是1秒,1秒内调用自身方法。
// 超过1秒则调用paymentInfo_timeoutHandler方法
还要在主启动类中加入 @EnableCircuitBreaker

注意: Java热部署 对@HystrixCommand 内的属性 无效,建议重启 微服务

客户端 hystrix 的使用(因为客户端有自己的一套处理逻辑,所以在客户端定义hystrix的使用。)

hystrix 的使用:
先在 yml文件中
feign:
hystrix:
enabled: true
在主启动类上加上@EnableHystrix
在方法上加入 @HystrixCommand(fallbackMethod = "paymentInfo_timeoutHandler",commandProperties = {@HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value = "1000")})
//上面的表达式表示设置方法的默认超时时间是1秒,1秒内调用自身方法。
// 超过1秒则调用paymentInfo_timeoutHandler方法
方法2全局服务降级处理 因为之前的 服务降级是针对 每一个方法都有一个自己的处理,代码臃肿,难看,用这个可以使得普通方法统一使用一种服务降级处理,特殊方法用之前的做特殊处理。
在类上定义 @DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")
方法上定义 @HystrixCommand

 

 

 

 


方法3 可以针对 @FeignClient 定义的类 做服务降级处理。因为之前的服务降级,出现在业务代码中,增加了业务代码代码量,且不是面向接口编程。 注意 如果3种合用,第一种会覆盖第二种和第3种。

 

 

 

服务熔断

 

 

 

 

 

 

 

 熔断的类型

 

 

 

 

 

 断路器在什么情况下开始起作用

 

 

 

 

 

 断路器开启或者关闭的条件

 

 

断路器打开之后

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



posted @ 2020-09-10 19:57  xie风细雨  阅读(143)  评论(0)    收藏  举报