1.创建hystrix项目microservice-student-provider-hystrix-1004
2.额外添加hystrix依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
3.修改application.yml文件
server:
port: 1004
context-path: /
eureka:
instance:
hostname: localhost #eureka客户端主机实例名称
appname: microservice-student #客户端服务名
instance-id: microservice-student-hystrix:1004 #客户端实例名称
prefer-ip-address: true #显示IP
4.启动类上增加@EnableCircuitBreaker
5.controller中增加@HystrixCommand方法及fallbackMethod方法
/**
* 获取信息
* @return
* @throws InterruptedException
*/
@ResponseBody
@GetMapping(value="/getInfo")
@HystrixCommand(fallbackMethod="getInfoFallback")
public Map<String,Object> getInfo() throws InterruptedException{
// 默认超时1秒
Thread.sleep(4000);
Map<String,Object> map=new HashMap<String,Object>();
map.put("code", 200);
map.put("info", "业务数据xxxxx");
return map;
}
public Map<String,Object> getInfoFallback() throws InterruptedException{
Map<String,Object> map=new HashMap<String,Object>();
map.put("code", 500);
map.put("info", "系统出错,稍后重试");
return map;
}
6.consumer中增加测试方法
@SuppressWarnings("unchecked")
@GetMapping(value="/getInfo")
@ResponseBody
public Map<String,Object> getInfo(){
return restTemplate.getForObject(PRE_HOST+"/student/getInfo/", Map.class);
}
不超时走getInfo方法,否则走getInfoFallback方法