Netflix Hystrix @EnableHystrix 注解

点击下载教程项目代码:netflix_hystrix_demo.zip

前面章节介绍的 Hystrix 实例中均使用 @EnableCircuitBreaker 注解开启断路器功能,但在 IDEA 中 @EnableCircuitBreaker 注解被提示不推荐使用,因为它的源码上面声明了 @Deprecated 注解。下面将介绍 @EnableHystrix 注解。

@EnableHystrix 注解

@EnableHystrix 是 Spring Cloud 提供的注解,用于在 Spring Boot 应用程序中启用 Hystrix 的功能。当你在主应用类或者配置类上添加这个注解后,Spring 会自动配置相关的 Hystrix 组件,包括线程池、断路器等,使得你的应用能够使用 Hystrix 来实现服务容错和降级。

@EnableHystrix 注解源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@EnableCircuitBreaker
public @interface EnableHystrix {

}

注意:@EnableHystrix 注解使用了 @EnableCircuitBreaker 注解进行修饰。

@EnableHystrix 与 @EnableCircuitBreaker 的区别

@EnableHystrix 和 @EnableCircuitBreaker 两个注解的功能都是用来激活 Hystrix 的功能。根据 @EnableHystrix 的源码可以发现,它继承了 @EnableCircuitBreaker,并对它进行了在封装。

如果你需要启动 Hystrix 功能,只需要在服务启动类加入 @EnableHystrix 注解即可,无须增加 @EnableCircuitBreaker 注解,本身 @EnableHystrix 注解已经涵盖了 @EnableCircuitBreaker 的功能。

工作原理

当 @EnableHystrix 被启用后,Spring 会为带有 @HystrixCommand 注解的方法创建代理。这个代理会拦截方法的调用,并根据 Hystrix 的配置(如断路器状态、线程池状态等)来决定是正常执行方法还是执行降级策略。

当一个服务的请求失败率(如超过一定的阈值,通常是 50%)或者响应时间过长(超过配置的超时时间)达到一定条件时,断路器会打开。此时,后续的请求就不会再真正地调用该服务,而是直接执行降级方法,直到断路器检测到服务已经恢复正常,才会重新闭合,允许正常的请求调用。

注意,Hystrix 会为每个被 @HystrixCommand 注解标记的方法(或者一组相关方法)分配一个独立的线程池。这样可以防止一个服务的故障导致整个应用的线程资源耗尽。例如,如果一个服务出现了大量的长时间阻塞的请求,它只会占用自己线程池中的线程,而不会影响其他服务对应的线程池。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号