Hystrix熔断和降级区别学习日记

SpringBoot框架学习 专栏收录该内容
5 篇文章 0 订阅

总结:笔记有点混乱,如果看到希望能给你点帮助~~

降级:有调用过程,只是调不过去才返回一个兜底的结果
触发降级的情况:1.程序运行异常
2.超时自动降级
3.服务熔断触发服务降级
4.线程池/信号量打满导致服务降级
5.人工降级

//用于设置超时降级处理配置
//1.   fallbackMethod:设置降级方法名称
//2.   commandProperties:name:  指定超时降级	value:超时时间
@HystrixCommand(fallbackMethod = "payment_TimeoutHandler",commandProperties = {
	@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",vlaue="5000")
})

@EnableCircuitBreaker 开启熔断开关

服务降级更多是在服务消费者(@EnableHystrix)侧。

统一降级处理(此时需要降级方法的只需要添加上@HystrixCommand注解即可,不用写具体属性了)
@DefaultProperties(defaultFallback= “”)
注意:统一降级处理方法是不带参数的
如:

@RestController
@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")
public class OrderHystrixController {
	public String payment_Global_FallbackMethod(){
		return "Global异常处理信息,请稍后再试T^T";
}

如果某个方法想走自己的降级方法,则依然采用@HystrixCommand(fallbackMethod…)即可,此时即便同时
定义了统一降级处理,依然是优先采用私有的

熔断:没有调用过程,直接返回一个兜底的结果服务。

@HystrixCommand(fallbackMethod= "paymentCircuitBreaker_fallback",
	commandProperties = {
		//启动断路器功能
		@HystirxProperty(name = "circuitBreaker.enabled", value="true")//在窗口时间内达到此数量的失败后,打开短路,默认20个
		@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value="10"),
		//断路器打开多久会尝试关闭时间窗口期,默认5s
		@HystrixProperty(name= "circuitBreaker.sleepWindowInMilliseconds",value="10000"),
		//出错百分比阈值,当达到阈值时,开始短路。默认50%
		@HystrixPeoperty(name="circuitBreaker.errorThreadholdPercentage",value="60")
	}

操作演示:10s窗口期内请求了10次,失败了7次,再点击时,无论是发送错误请求还是正确请求,都没有调用过程,直接快速失败展示降级
方法,等过了10s,断路器重新打开时间窗口。开始新的一轮熔断操作。

可以理解为熔断是降级的一种特殊化处理

//=============================================================
补充:Hystrix如何实现监控

消费端:启动类上加上@EnableHystrixDashboard

服务端:直接在启动类加入bean对象(启动类本身就是个配置类,不需要再添加@Configuration注解,如果单独创建一个配置类,需要加上@Configuration)

    /**
     *此配置是为了服务监控而配置,与服务容错本身无关,springcloud升级后的坑
     *ServletRegistrationBean因为springboot的默认路径不是"/hystrix.stream",
     *只要在自己的项目里配置上下面的servlet就可以了
     */
@Bean
public ServletRegistrationBean getServlet() {
	HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet()ServletRegistrationBean registrationBean = new ServletRegistrationBean();
	registrationBean.setLoadOnStartup(1);
	registrationBean.addUrlMappings("/hystrix.stream");
	registrationBean.setName("HystrixMetricsStreamServlet")return registrationBean;
}

客户端监控服务端熔断状态
操作:启动注册中心,客户端和服务端,登录 http://服务端IP:端口/hystrix.stream 显示ping成功,
登录 http://客户端IP:端口/hystrix 将 http://服务端IP:端口/hystrix.stream添加进监控
客户端发送请求开始进行监控

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值