Hystrix 断路器
Ribbon
1.导包
<!--Hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.注解—主配置类开启注解
@EnableCircuitBreaker
3.Controller回调方法
@RequestMapping("/orderserver")
@RestController
public class OrderServerController {
@Autowired
private RestTemplate restTemplate;
//浏览器调用,根据id获取用户 : 有负载均衡
@GetMapping("/user/{id}")
@HystrixCommand(fallbackMethod = "getUserByIdFallBack")//托底方法
public AjaxResult getUserById(@PathVariable("id")Long id){
//RestTemplate 调用用户服务的获取user的接口
String url = "http://user-server/userserver/user/"+id;
//调用方法获取用户
User user = restTemplate.getForObject(url, User.class);
//AjaxResult对象
AjaxResult ajaxResult = new AjaxResult();
//设置要传递的参数对象
ajaxResult.setData(user);
//返回
return ajaxResult;
}
//这里我们返回AjaxResult,后面都会用这种形式进行规范
public AjaxResult getUserByIdFallBack(@PathVariable("id")Long id){
//AjaxResult对象
AjaxResult ajaxResult = new AjaxResult();
ajaxResult.setSuccess(false);
//设置错误信息
ajaxResult.setMsg("服务器开小差了!");
return ajaxResult;
}
}
备注----准备AjaxResult
public class AjaxResult {
//默认为true
private boolean success = true;
private String msg;
private Object data;
public AjaxResult() {
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}