SpringCloud入門之服務熔斷


一、服務熔斷介紹

1.1 服務雪崩

在微服務架構中,服務與服務之間通過遠程調用的方式進行通信,一旦某個被調用的服務發生了故障,依賴其的服務也會發生故障,此時就會發生故障的蔓延,最終導致系統癱瘓,這就是所謂的”雪崩效應”。

1.2 服務熔斷

熔斷機制是應對雪崩效應的一種微服務鏈路保護機制。當鏈路的某個微服務不可用或者響應時間太長時,會進行服務的降級,進而熔斷該節點微服務的調用,快速返回”錯誤”的響應信息。當檢測到該節點微服務響應正常后,重新恢復調用鏈路。

二、Hystrix

2.1 Hystrix 介紹

Hystrix 是一個用於分布式系統的延遲和容錯的開源庫。Hystrix 實現了斷路器模式,當某個服務發生故障時,通過斷路器的監控,給調用方返回一個錯誤響應,而不是長時間的等待,這樣就不會使得調用方由於長時間得不到響應而占用線程,從而防止故障的蔓延。Hystrix 具備服務降級、服務熔斷、線程隔離、請求緩存、請求合並及服務監控等強大功能。

2.2 Hystrix 使用方法

通過在方法上使用注解 @HystrixCommand ,常用參數:

* fallbackMethod:指定服務降級處理方法;
* ignoreExceptions:忽略某些異常,不發生服務降級;
* commandKey:命令名稱,用於區分不同的命令;
* groupKey:分組名稱,Hystrix會根據不同的分組來統計命令的告警及儀表盤信息;
* threadPoolKey:線程池名稱,用於划分線程池。

二、服務降級實例

注:本實例在 ribbon-service 項目基礎上演示。

2.1 在 pom 文件中新增 Hystrix 依賴

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2.2 開啟斷路器功能

RibbonServiceApplication 中添加 @EnableCircuitBreaker 注解啟用 Hystrix 斷路器功能

@EnableCircuitBreaker
@SpringBootApplication
public class RibbonServiceApplication {
    ......
}

2.3 新增失敗降級回調方法

@RestController
public class UserRibbonController {

    @Value("${service-url.user-service}")
    private String userServiceUrl;
    private final RestTemplate restTemplate;

    public UserRibbonController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }  
    
    @GetMapping("/get/{username}")
    @HystrixCommand(fallbackMethod = "fallbackMethod")
    public User getUser(@PathVariable String username) {
        return restTemplate.getForObject(userServiceUrl + "/user/{1}", User.class, username);
    }

    public User fallbackMethod(@PathVariable String username) {
        return new User("服務調用失敗");
    }
}    

2.4 啟動服務

訪問 http://localhost:8210/user/get/marklogzhu,返回如下 JSON 數據:

{
  username: "marklogzhu"
}

停止 user-service ,再次訪問 http://localhost:8210/user/get/marklogzhu,返回如下 JSON 數據:

{
	username: "服務調用失敗"
}

可以發現已經發生了服務降級。


免責聲明!

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



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