Spring Cloud Hystrix
Hystrix是一个延迟和容错库,旨在隔离远程系统、服务和第三方库,阻止链接故障,在复杂的分布式系统中实现恢复能力。
一、快速入门
1)依赖:
org.springframework.cloud spring-cloud-starter-netflix-hystrix
2)启用断路模式
@SpringBootApplication@EnableHystrix@EnableDiscoveryClientpublic class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication.class, args); }}
3)降级
@Componentpublic class UserService implements IUserService { @Override @HystrixCommand(fallbackMethod = "defaultUser") public String getUser(String username) throws Exception { if (username.equals("spring")) { return "Right user."; } else { throw new Exception(); } } /** * 调用该方法返回预设友好错误 * */ public String defaultUser(String username) { return "Use the default user."; }}
在Feign中默认是自带Hystrix功能的,在老版本中是默认打开的,从最近几个版本中开始默认
关闭了,所以需要通过配置文件打开它。
二、Hystrix Dashboard
Hystrix Dashboard仪表盘是根据系统一段时间内发生的请求情况来展示的可视化面板,
这些信息是每个HystrixCommand执行过程中的信息。
依赖:
org.springframework.cloud spring-cloud-starter-netflix-hystrix-dashboard org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-actuator
启用:
SpringBootApplication@EnableDiscoveryClient@EnableHystrixDashboardpublic class HystrixDashboardApplication { public static void main(String[] args) { SpringApplication.run(HystrixDashboardApplication.class, args); }}
三、Hystrix异常处理机制
Hystrix的异常处理中,有5种出错的情况会被fallback所截获:
1)FAILURE:执行失败,抛出异常。
2)TIMEOUT:执行超时。
3)SHORT_CIRCUITED:断路器打开。
4)THREAD_POOL_REJECTED:线程池拒绝。
5)SEMAPPHORE_REJECTED:信号量拒绝。