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种。


服务熔断


熔断的类型

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

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

断路器打开之后



浙公网安备 33010602011771号