实践Spring Cloud之Hystrix

Spring Cloud Hystrix是基于Netflix Hystrix的封装,实现断路器,提供服务降级、容错保护,提供了超时机制、线程隔离等一系列服务保护功能。

快速使用

1
2
3
4
1
2
3
4
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
1
@EnableCircuitBreaker
1
2
3
4
5
6
7
8
9
10
// 断路器包装外部请求,指定后备方法【请求失败、超时、被拒绝以及断路器打开时都会执行回退逻辑】
@HystrixCommand(fallbackMethod = "helloFallback")
public String hello() {
	return restTemplate.getForEntity("http://HELLO-SERVICE/hello", String.class).getBody();
}

// 后备方法
public String helloFallback() {
	return "error";
}

hystrix.command.default.execution.isolation.thread.timeoutInMillisecond=2000

feign默认使用断路器(hystrix)包裹所有方法。

原理

基于命令模式实现。

HystrixCommand:用在依赖的服务返回单个操作结果

execute()

queue()

HystrixObservableCommand:用在依赖的服务返回多个操作结果

observe()

toObserve()

Hystrix Dashboard

client

1
2
3
4
1
2
3
4
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

提供/hystrix.stream端点

server

Hystrix Dashboard实现可视化/hystrix.stream和/turbine.stream端点的数据,turbine参见Spring Cloud Turbine

1
2
3
4
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>

http://localhost:8080/hystrix