继续在上一篇项目上扩展,在study_client module的pom.xml 添加熔断器依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
在启动类上添加 @EnableHystrix 注解,开启熔断器功能。
修改RibbonService代码,在hi方法上添加@HystrixCommand 熔断注解,hi方法就有了熔断功能,其中fallbackeMethod为回退逻辑的处理方法,在熔断器打开的状态下,会执行fallback逻辑。这里不建议处理复杂的逻辑,也不建议远程调度其他服务,如果需要也得在远程服务上加熔断功能:
@Service
public class RibboService {
@Autowired
RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "hiError")
public String hi(){
String url ="http://eureka-client/hello";
return restTemplate.getForObject(url,String.class);
}
public String hiError(){
return "sorry 发生熔断错误!";
}
}
依次启动eureka_service的peer1 实例 ,启动eureka_client的两个实例,启动study_client。
浏览器访问:http://localhost:8763/hi ,可以看到能直接访问到。
关闭eureka_client的一个实例,会看到刷新之后,会一会访问另一个实例,继续关闭另一个实例,此时界面显示熔断错误,也就是我们刚才代码里输入的字符串: