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