HyStrix
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式的弹性。
1、服务熔断
熔断机制是对应雪崩效应的一种微服务链路保护机制。
当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制遇过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand,用于服务端
创建cloud-hystrix-9100项目
导入依赖pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
在主启动类加入注解@EnableCircuitBreaker
添加熔断方法
@GetMapping("queryByName/{name}")
@HystrixCommand(fallbackMethod = "hystrixByName")
public User queryByName(@PathVariable("name") String name){
User user = userService.queryByName(name);
if(user == null){
throw new RuntimeException();
}
return user;
}
public User hystrixByName(@PathVariable("name") String name){
return new User().setName(name+"-没有该人员");
}
测试结果
2、服务降级
服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行,用于客户端
在cloud-api项目里创建类实现FallbackFactory
@Component
public class UserHystrixClientFactory implements FallbackFactory {
@Override
public UserFeignClient create(Throwable cause) {
return new UserFeignClient() {
@Override
public User queryByName(String name) {
return new User().setName(name+"没有对应实体,服务降级");
}
};
}
}
在feign客户端调用加fallbackFactor属性值
@FeignClient(value = "PROVIDER-8000",fallbackFactory = UserHystrixClientFactory.class)
public interface UserFeignClient {
@GetMapping("user/queryByName/{name}")
public User queryByName(@PathVariable("name") String name);
}
先访问eureka,发现服务有注册进来
调用服务接口,正常
关闭服务,测试
3、服务监控
Hystrix提供了 准实时的服务调用监控项目Dashboard,能够实时记录通过Hystrix发起的请求执行情况,可以通过图表的形式展现给用户看
创建cloud-comsume-hystrix-dashboard项目
pom.xml加入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
application.yml
server:
port: 9001
主启动类加监控注解@EnableHystrixDashboard
@SpringBootApplication
@EnableHystrixDashboard //开启监控
public class Dashboard9001 {
public static void main(String[] args) {
SpringApplication.run(Dashboard9001.class,args);
}
}
配置被监控的服务
@Bean
public ServletRegistrationBean registrationBean(){
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
registrationBean.addUrlMappings("/actuator/hystrix.stream");
return registrationBean;
}
访问http://localhost:9001/hystrix