概念
Hystrix是Netlifx开源的一款容错框架,防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。
Hystrix是一个用于处理分布式系统中延迟和容错的开源库,在分布式系统中,许多依赖会不可避免的调用失败,比如超时,异常等,Hystrix能保证在一个依赖出现问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
“断路器”本身是一个开关装置,当某个服务发生故障时,通过断路器的监控,向调用方法返回一个预期的响应,而不是长时间的等待或者抛出无法处理的异常,这样就可以服务调用方的线程不会长时间的被占用,从而导致故障在分布式系统中蔓延,乃致雪崩。
服务熔断
服务熔断: 在分布式系统中,不可避免的会有一些服务相互依赖 ,如:用户的一个请求进来,会先调用服务A,然后服务A调用服务B,服务B调用服务C,这时候如果服务B出现了故障 ,那么就会发生服务雪崩
使用
可以在可能出现故障的方法上加@HystrixCommand注解,fallbackMethod的值设置为自定义方法,这样当方法抛出异常后,会调用自定义方法,而不是直接抛出异常
添加相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
启动类加@EnableCircuitBreaker注解
在需要熔断的方法上添加注解及自定义熔断方法
@HystrixCommand(fallbackMethod = "fallback2")
public String test(@RequestParam("number")Integer number) {
String str = "success";
if (number == 1) {
return str;
}
// 业务代码
return str;
}
private String fallback2(Integer number) {
log.info("发生服务熔断,参数"+number);
return "发生服务熔断,请联系管理员或稍后重试";
}
服务降级
在微服务中,如果某个服务压力过大时,可以停止其他请求次数较小的服务,以减轻服务器压力,而被停掉的服务不可以报错,而应该返回一个提示信息,此时,可以在服务端进行服务降级处理
结合Feign使用服务降级
在通过feign调用其他微服务的时候,通过feign注解的fallBackFactory方法指定一个类,这个类负责处理调用的微服务发生故障时返回的值
Feign类如下
@FeignClient(name = "DemoService", fallbackFactory = FallBackDemo.class)
public interface DemoFeign {
@GetMapping("/article")
Article getArticle(Integer id);
}
自定义返回类如下
@Component
@Slf4j
public class FallBackDemo implements DemoFeign{
@Override
public Article getArticle(Integer id) {
log.info("服务调用失败,返回默认值");
return new Article();
}
}
如果DemoService服务调用失败,该接口不会报错而是会返回一个新的Article对象,这里的返回值可以根据需要进行处理
PS.服务熔断在服务端进行处理,服务降级在客户端进行处理
服务监控
添加相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
<!-- 服务提供者需要添加的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
启动类添加注解@EnableHystrixDashboard
完成后启动项目,通过http://{ip}:{port}/hystrix查看监控可视化界面
进入dashboard后界面如下
👍 欢迎前往博客主页查看更多内容
👍 如果觉得不错,期待您的点赞、收藏、评论、关注
👍 如有错误欢迎指正!