- 断路器简介
断路器本身是电路上的一种过载保护装置,当线路中有电器发生短路时,它能够及时的切断故障电路以防止严重后果发生
以下是软件系统中的熔断机制
断路器状态
- 完全打开
一定时间内 达到多少次C无法调用 并且多次检测C没有恢复迹象 断路器完全打开 - 半开
一定时间内 达到多少次C无法调用 短时间内 C有恢复迹象 断路器会将部分请求发送给C 部分请求通过断路器返回回调 当部分请求完成能正常调用
可能会关闭断路器 - 关闭
如果C服务一直处于正常状态 B都可以正常调用 断路器处于关闭状态
hystrix依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
- main类添加@EnableCircuitBreaker
调用方熔断
@RequestMapping("invokeServiceBalance")
@HystrixCommand(fallbackMethod="invokeServiceBalanceFallBack")
public String invokeServiceBalance() {
String uuid=restTemplate.getForObject("http://IDSERVER/getId",String.class);
return uuid;
}
public String invokeServiceBalanceFallBack() {
return "NOUUID";
}
启用断路器(依赖同ribbon)
feign: hystrix: enabled: true
添加接口实现类 作为断路器
@FeignClient(name="idserver",fallback=TestClientFallback.class)
public interface TestClient {
@RequestMapping(method = RequestMethod.GET, value = "/getUser/{id}")
public User getId(@PathVariable("id") String id) ;
}
class TestClientFallback implements TestClient{
@Override
public User getId(String id) {
User user=new User();
return user;
}
}
- 添加监控依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
访问监控数据
访问 http://localhost:端口//hystrix.stream
打印数据
data: {"type":"HystrixCommand","name":"invokeServiceBalance","group":"TestController","currentTime":1507519121493,"isCircuitBreakerOpen":false,"
* 注意:注: isCircuitBreakerOpen表示是否打开断路器
*
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
主类添加
@EnableHystrixDashboard
访问地址:http://localhost:端口/hystrix