springcloud熔斷機制


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注解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM