1.把foodie-user-web的PassportController的login方法修改成熔断降级
2.配置HystrixCommand,在方法的头部加入@HystrixCommand注解
@HystrixCommand(
commandKey = "loginFail", // 全局唯一的标识服务,默认函数名称
groupKey = "password", // 全局服务分组,用于组织仪表盘,统计信息。默认:类名
fallbackMethod = "loginFail", //同一个类里,public private都可以
// 在列表中的exception,不会触发降级
// ignoreExceptions = {IllegalArgumentException.class}
// 线程有关的属性
// 线程组, 多个服务可以共用一个线程组
threadPoolKey = "threadPoolA",
threadPoolProperties = {
// 核心线程数
@HystrixProperty(name = "coreSize", value = "10"),
// size > 0, LinkedBlockingQueue -> 请求等待队列
// 默认-1 , SynchronousQueue -> 不存储元素的阻塞队列(建议读源码,学CAS应用)
@HystrixProperty(name = "maxQueueSize", value = "40"),
// 在maxQueueSize=-1的时候无效,队列没有达到maxQueueSize依然拒绝
@HystrixProperty(name = "queueSizeRejectionThreshold", value = "15"),
// (线程池)统计窗口持续时间
@HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "2024"),
// (线程池)窗口内桶子的数量
@HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "18"),
}
// ,
// commandProperties = {
// // TODO 熔断降级相关属性,也可以放在这里
// }
)
3.实现熔断降级方法loginFail
1.参数一样
2.方法名不一样
3.多一个参数Throwable throwable,抛出错误,在方法中接收错误
4.模仿12306的错误抛出
5.@HystrixCommand在代码中感觉比较乱,推荐使用配置文件实现方式
private IMOOCJSONResult loginFail(UserBO userBO,
HttpServletRequest request,
HttpServletResponse response,
Throwable throwable) throws Exception {
return IMOOCJSONResult.errorMsg("验证码输错了(模仿12306)" + throwable.getLocalizedMessage());
}