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