《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
此处省略了创建用户类User和统一返回前端的响应类Result,RestTemplate配置,UserService接口的创建,具体的可以参考项目源码
@RestController
@RequestMapping(“/user”)
public class UserHystrixController {
@Autowired
private UserService userService;
@GetMapping(“/testFallback/{id}”)
public Result testFallback(@PathVariable Long id) {
return userService.getUser(id);
}
@GetMapping(“/testException/{id}”)
public Result testException(@PathVariable Long id) {
return userService.getUserException(id);
}
@GetMapping(“/testCommand/{id}”)
public Result getUserCommand(@PathVariable Long id) {
return userService.getUserCommand(id);
}
@GetMapping(“/testCache/{id}”)
public Result testCache(@PathVariable Long id) {
userService.getUserCache(id);
userService.getUserCache(id);
userService.getUserCache(id);
return new Result(“操作成功”, 200);
}
@GetMapping(“/testRemoveCache/{id}”)
public Result testRemoveCache(@PathVariable Long id) {
userService.getUserCache(id);
userService.removeCache(id);
userService.getUserCache(id);
return new Result(“操作成功”, 200);
}
@GetMapping(“/testCollapser”)
public Result testCollapser() throws ExecutionException, InterruptedException {
Future future1 = userService.getUserFuture(1L);
Future future2 = userService.getUserFuture(2L);
future1.get();
future2.get();
ThreadUtil.safeSleep(200);
Future future3 = userService.getUserFuture(3L);
future3.get();
return new Result(“操作成功”, 200);
}
}
在UserHystrixController中添加用于测试服务降级的接口:
@GetMapping(“/testFallback/{id}”)
public Result testFallback(@PathVariable Long id) {
return userService.getUser(id);
}
在UserService中添加调用方法与服务降级方法,方法上需要添加@HystrixCommand注解:
@HystrixCommand(fallbackMethod = “fallbackMethod1”)
public Result getUser(Long id) {
return restTemplate.getForObject(userServiceUrl + “/user/{1}”, Result.class, id);
}
/**
-
声明的参数需要包含controller的声明参数
-
@param id
-
@return
*/
public Result fallbackMethod1(@PathVariable Long id) {
return new Result(“服务调用失败”, 500);
}
启动eureka-server、user-service、hystrix-service服务