熔断,限流
講完降級,我們來講講熔斷,其實熔斷,就好像我們生活中的跳閘一樣, 比如說你的電路出故障了,為了防止出現(xiàn)大型事故 這里直接切斷了你的電源以免意外繼續(xù)發(fā)生, 把這個概念放在我們程序上也是如此, 當(dāng)一個微服務(wù)調(diào)用多次出現(xiàn)問題時(默認是10秒內(nèi)20次當(dāng)然 這個也能配置),hystrix就會采取熔斷機制,不再繼續(xù)調(diào)用你的方法(會在默認5秒鐘內(nèi)和電器短路一樣,5秒鐘后會試探性的先關(guān)閉熔斷機制,但是如果這時候再失敗一次{之前是20次} 那么又會重新進行熔斷) 而是直接調(diào)用降級方法,這樣就一定程度上避免了服務(wù)雪崩的問題
這個東西光筆記不太好測試,只能你們自己去測試了
限流
限流, 顧名思義, 就是限制你某個微服務(wù)的使用量(可用線程)
hystrix通過線程池的方式來管理你的微服務(wù)調(diào)用,他默認是一個線程池(10大小) 管理你的所有微服務(wù),你可以給某個微服務(wù)開辟新的線程池:
@RequestMapping("/feignOrder.do") @HystrixCommand(fallbackMethod = "fallbackOrderMethod" ,threadPoolKey = "order",threadPoolProperties ={@HystrixProperty(name = "coreSize",value = "2"),@HystrixProperty(name = "maxQueueSize",value = "1"}) public Object feignOrder(String name){System.out.println(1);return restTemplate.getForObject(ORDERURL+"/order.do",Object.class); }threadPoolKey 就是在線程池唯一標(biāo)識, hystrix 會拿你這個標(biāo)識去計數(shù),看線程占用是否超過了, 超過了就會直接降級該次調(diào)用
比如, 這里coreSize給他值為2 那么假設(shè)你這個方法調(diào)用時間是3s執(zhí)行完, 那么在3s內(nèi)如果有超過2個請求進來的話, 剩下的請求則全部降級
?
總結(jié)
- 上一篇: 降级,超时
- 下一篇: feign整合hystrix: