1.把foodie-user-web的PassportController的login方法修改成熔斷降級
2.配置HystrixCommand,在方法的頭部加入@HystrixCommand注解
@HystrixCommand(
commandKey = "loginFail", // 全局唯一的標(biāo)識服務(wù)裹纳,默認(rèn)函數(shù)名稱
groupKey = "password", // 全局服務(wù)分組枕稀,用于組織儀表盤朋贬,統(tǒng)計(jì)信息削罩。默認(rèn):類名
fallbackMethod = "loginFail", //同一個(gè)類里靴寂,public private都可以
// 在列表中的exception帕胆,不會觸發(fā)降級
// ignoreExceptions = {IllegalArgumentException.class}
// 線程有關(guān)的屬性
// 線程組, 多個(gè)服務(wù)可以共用一個(gè)線程組
threadPoolKey = "threadPoolA",
threadPoolProperties = {
// 核心線程數(shù)
@HystrixProperty(name = "coreSize", value = "10"),
// size > 0, LinkedBlockingQueue -> 請求等待隊(duì)列
// 默認(rèn)-1 , SynchronousQueue -> 不存儲元素的阻塞隊(duì)列(建議讀源碼荆永,學(xué)CAS應(yīng)用)
@HystrixProperty(name = "maxQueueSize", value = "40"),
// 在maxQueueSize=-1的時(shí)候無效废亭,隊(duì)列沒有達(dá)到maxQueueSize依然拒絕
@HystrixProperty(name = "queueSizeRejectionThreshold", value = "15"),
// (線程池)統(tǒng)計(jì)窗口持續(xù)時(shí)間
@HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "2024"),
// (線程池)窗口內(nèi)桶子的數(shù)量
@HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "18"),
}
// ,
// commandProperties = {
// // TODO 熔斷降級相關(guān)屬性,也可以放在這里
// }
)
3.實(shí)現(xiàn)熔斷降級方法loginFail
1.參數(shù)一樣
2.方法名不一樣
3.多一個(gè)參數(shù)Throwable throwable具钥,拋出錯(cuò)誤豆村,在方法中接收錯(cuò)誤
4.模仿12306的錯(cuò)誤拋出
5.@HystrixCommand在代碼中感覺比較亂,推薦使用配置文件實(shí)現(xiàn)方式
private IMOOCJSONResult loginFail(UserBO userBO,
HttpServletRequest request,
HttpServletResponse response,
Throwable throwable) throws Exception {
return IMOOCJSONResult.errorMsg("驗(yàn)證碼輸錯(cuò)了(模仿12306)" + throwable.getLocalizedMessage());
}