SpringCloud的Hystrix简单介绍
Hystrix 介绍
Hystrix ,中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力。
SpringCloud Hystrix
是Netflix开源的一款容错框架,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能,同样具有自我保护能力。为了实现容错和自我保护
服务雪崩
分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。
一个服务失败,导致整条链路的服务都失败的情形,我们称之为服务雪崩
服务降级
一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。
这样做,虽然会出现局部的错误,但可以避免因为一个服务挂机,而影响到整个架构的稳定性。
通过服务降级,能保证在某个或某些服务出问题的时间,不会导致整个项目出现问题,避免级联故障,从而来提高分布式系统的弹性。
服务熔断
Hystrix意为“断路器”,就和我们生活中的保险丝,开关一个道理。
当我们给整个服务配置了服务降级后,如果服务提供者发生了错误后,就会调用降级后的方法来保证程序的运行。
但是呢?有一个问题,调用者并不知道它调用的这个服务出错了,就会在业务发生的时候一直调用,然后服务会一直报错,然后去调用降级方法。好比下图中:
Hystrix入门案例
添加如下依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
启动类上添加注解
@EnableHystrix
使用feign
请求数据 ,加上注解@HystrixCommand(fallbackMethod="fallback")
fallback
是方法 在方法中保持传参和返回值相同。
服务报错降级
// http://localhost:7001/consumer/test @HystrixCommand(fallbackMethod = "fallback") @GetMapping("/test") public String testFeign(String str) throws Exception { if ("y".equalsIgnoreCase(str)) { throw new Exception(); } return providerService.provider(str); } public String fallback(String str) { return "服务繁忙,请稍后重试!"; }
服务超时降级
// http://localhost:7001/consumer/timeout @HystrixCommand(fallbackMethod = "timeout",commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000") }) @GetMapping("/timeout") public String testTimeout(String str) throws Exception { Thread.sleep(5000); return providerService.provider(str); } public String timeout(String str) { return "请求时间超时"; }
到此这篇关于SpringCloud的Hystrix简单介绍的文章就介绍到这了,更多相关SpringCloud的Hystrix内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java中list.foreach()和list.stream().foreach()用法详解
在Java中List是一种常用的集合类,用于存储一组元素,List提供了多种遍历元素的方式,包括使用forEach()方法和使用Stream流的forEach()方法,这篇文章主要给大家介绍了关于Java中list.foreach()和list.stream().foreach()用法的相关资料,需要的朋友可以参考下2024-07-07Spring中Controller和RestController的区别详解
这篇文章主要介绍了Spring中Controller和RestController的区别详解,@Controller是标识一个Spring类是Spring MVC controller处理器,@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面,需要的朋友可以参考下2023-09-09
最新评论