SpringCould-hystrix
在ribbon+restTemplate方式使用熔断器hystrix
阻止服务故障的“雪崩”效应(我简称保险)
在
ribbonrest
项目上添加compile('org.springframework.cloud:spring-cloud-starter-netflix-hystrix')
该依赖(这里用的gradle,maven做相应格式修改),或者直接新建一个项目勾选如下- web->web
- Could discovery-> eureka server
- Could routing->ribbon
- Could Circuit Breaker->Hystrix
在
application
启动类添加一个注解@EnableHystrix
拉上保险开关修改服务调用类
HelloService
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class HelloService {
RestTemplate restTemplate;
//调用发生错误就调用hiError方法
public String hiService(String name){
//eureka-client为服务提供者的spring.application.name=eureka-client
return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
}
//发生错误调用的方法
public String hiError(String name) {
return "hi,"+name+",sorry,error!";
}
}启动该服务(8093),然后访问http://127.0.0.1:8093/resthi?name=32,然后再停止两台服务提供者的其中一台,然后刷新一台提示错误,一台正常访问
启动顺序 访问结果 再启动 结果 注册中心-服务提供者(1和2)-服务消费者 2台交替访问 注册中心-服务提供者(1)-服务消费者-服务提供者(2) 1能访问 注册中心-服务提供者(1和2)-服务消费者-停止1 1抛异常,2正常访问 再启动1 恢复时间慢 注册中心-服务提供者(1和2)-服务消费者(开启了熔断器)-停止1 1返回熔断器自定义的错误信息,2正常访问 再启动1 马上可以交替访问
在feign模式使用熔断器
Feign是自带断路器的
新建
SchedualServiceHiHystric
实现服务调用的接口1
2
3
4
5
6
7
public class SchedualServiceHiHystric implements FeignSchedualService{
public String sayHiFromEurekaClient(String name) {
return "sorry "+name;
}
}在服务调用接口的
@FeignClient
添加fallback
指向刚刚实现这个接口的类1
2
3
4
5//指定调用那个服务(服务名spring.application.name)
public interface FeignSchedualService {
//指定调用eureka-client服务的那个接口
String sayHiFromEurekaClient(; String name)
}在
application
配置文件添加该配置启用熔断器1
2
3feign:
hystrix:
enabled: true依次启动注册中心,该服务(8094),然后访问http://127.0.0.1:8094/sayhi?name=32,启动测试见上面的第四步骤
区别:服务提供者挂了一个不会交替返回正确错误信息,只要还有一个服务正常就返回正确信息,直到所有服务提供者挂了才返回错误信息。