springcloud熔斷機制
1、為什么要有熔斷機制
由於網絡原因或者自身服務的原因,導致服務可能會產生故障或者是不可用,如果此服務生產故障,就會導致請求此服務的線程阻塞,如果涉及大量的線程請求阻塞,就進一步導致容器產生癱瘓,也會導致其它服務不可用,就會產生“雪崩效應
”。因此需要一種機制處理,此機制就是“斷路器”
2、什么雪崩效應
在微服務架構中,可能因為某一個基礎服務故障,而導致多個服務之間的調用,出現阻塞,無法調用,一環扣一環,導致所有服務不可用,我們稱這效應為雪崩效應。
3、什么是熔斷
服務熔斷就是對該服務的調用執行熔斷,對應后續請求,不在繼續調用該目標服務,而是直接返回,從而可以快速釋放資源,或者服務出現故障,會把故障信息返回給客戶端
4、觸發熔斷的條件
- 當請求服務失敗的次數超過一定的比例(默認50%),熔斷就會生效
- 熔斷默認持續時間5秒,5秒之后它就會從(開路狀態---》半開路狀態)
- 處於半開路狀態,判斷下一次請求,是否成功,如果成功,則切回到閉路狀態
5、降級服務
當熔斷機制啟動,此服務不可用,直接返回失敗,它會有一個響應機制處理:調用降級服務的響應方法實現
6、熔斷降級實現
熔斷降級機制作用在客戶端,在服務消費端實現
6.1、導入依賴
<!--支持hystrix組件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
6.2、定義應急方法
業務層使用feign實現,不用寫實現類,所以應急方法在控制器指定;如果使用RestTemplate實現,應急方法在業務層實現類指定
package com.yl.controller;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
import com.yl.bean.User;
import com.yl.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("/testHyStrix01")
@HystrixCommand(fallbackMethod = "testHyStrix01FallBack")//指定應急方法
public String testHyStrix01(){
return userService.testHyStrix01();
}
String testHyStrix01FallBack(){
return "請求服務不可用了,不要再來了";
}
}
配置了熔斷降級啟動類上要添加@EnableHystrix注解