您现在的位置是:亿华云 > IT科技
SpringCloud系列之Hystrix熔断器
亿华云2025-10-03 20:17:58【IT科技】8人已围观
简介什么是熔断器?熔断器本身是一个开关设置,当某个服务单元发生故障之后,通过熔断器的故障监控(类似保险丝),向调用方返回一个服务预期的,可处理的备选相应(fallBack),而不是长时间的等待或者抛出调用
熔断器本身是一个开关设置,当某个服务单元发生故障之后,断器通过熔断器的断器故障监控(类似保险丝),向调用方返回一个服务预期的断器,可处理的断器备选相应(fallBack),而不是断器长时间的等待或者抛出调用方法无法处理的异常。这样就保证了服务调用方的断器线程不会长时间,不必要的断器占用,从而避免了故障在分布式系统中的断器蔓延,乃至雪崩。断器
Hystrix的断器目标通过第三方客户端访问的依赖项(通常是通过网络)的云服务器延迟和故障进行保护和控制。在复杂的断器分布式系统中防止级联故障。快速失败,断器快速恢复。断器回退,断器尽可能优雅地降级。启用实时监控、报警和操作控制。Hystrix设计原理防止任何单个依赖项耗尽整个容器用户线程甩掉包袱,快速失败而不是排队。在任何可行的地方提供回退,以保护用户不受失败的影响。使用隔离技术来限制任何一个依赖项的影响。通过实时的度量、监视和报警来优化发现时间。通过配置的低延迟传播来优化恢复时间。支持对Hystrix的网站模板大多数方面的动态属性更改,允许使用低延迟反馈循环进行实时操作修改。避免在整个客户端执行中出现故障,而不仅仅是在网络流量中。Hystrix断路器Demo引入jar包;
spring-cloud-starter-hystrix
在启动类上开启断路器。
@SpringBootApplication
@EnableEurekaClient // 表示是eureka的客户端
@EnableFeignClients
@EnableDiscoveryClient // 提供服务发现
@EnableCircuitBreaker // 开启hystrix断路器
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
/
*** 远程调用
*/
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
/
*** feign的日志通过代码的方式(也可以通过yml配置文件的方式)
*/
@Bean
public Logger.Level feignLogger() {
return Logger.Level.FULL;
}
}单个回滚方法:
/
*** Hystrix实例:单个回滚
* @author Big.Hu
*/
@RestController
public class UserController {
/
*** 熔断机制
* 异常后执行getFeignFallback()方法
*/
@HystrixCommand(fallbackMethod = "getFeignFallback")
@GetMapping("feign/{ id}")
public String getFeign(@PathVariable("id") int id) {
int i = 1 / 0; // 异常
return userFeign.getOrder1(id);
}
private String getFeignFallback(@PathVariable("id") int id) {
System.out.println("断路器生效。");
return "提示:网络繁忙,请稍候再试。。" + id;
}
}访问请求:localhost:7001/feign/555。
断路器生效
控制台:
全局的回滚方法:
/
*** Hystrix实例:全局回滚
* @author Big.Hu
*/
@RestController
@DefaultProperties(defaultFallback = "defaultFallback")
public class UserController {
@GetMapping("feign/{ id}")
public String getFeign(@PathVariable("id") int id) {
int i = 1 / 0; // 异常
return userFeign.getOrder1(id);
}
private String defaultFallback() {
System.out.println("全局断路器生效。");
return "提示:服务器繁忙,请稍候再试。。";
}
}访问请求:localhost:7001/feign/555。
全局断路器生效
控制台:
控制台
服务器托管很赞哦!(79181)
上一篇: 量子数据中心可能是未来的发展方向
下一篇: 数据中心可持续发展的趋势