1. 程式人生 > >微服務spring cloud—Hystrix簡介和通過方式整合H

微服務spring cloud—Hystrix簡介和通過方式整合H

Hystrix簡介

Hystrix是由Netflix開源的延遲和容錯庫,用於隔離訪問遠端系統、服務或者第三方庫,防止級聯失敗,從而提升系統的可用性與容錯性。Hystrix主要通過以下幾點實現延遲和容錯。

包裹請求:使用HystrixCommand(或HystrixObservableCommand)包裹對以來
的呼叫邏輯,每個命令在獨立執行緒中執行。這是用到了設計模式中的“命令模式”。

跳閘機制:當某服務的錯誤率超過一定閾值,Hystrix可以自動或者手動跳閘,
停止請求該服務一段時間。

資源隔離:Hystrix為每個依賴都維護一個小型的執行緒池(或者訊號量)。如果
該執行緒池已滿,發往該依賴的請求就被立即拒絕,而不是排隊等待,從而加速
失敗判定。

監控:Hystrix可以近乎實時地監控執行指標和配置的變化,例如成功、失敗、
超時、以及被拒絕的請求等。

回退機制:當請求失敗、超時、被拒絕,或當斷路器開啟時,執行回退邏輯。
	回退邏輯可由開發人員自行提供,例如返回一個預設值。

自我修復:斷路器開啟一段時間後,會自動進入“半開”狀態。斷路器開啟、關閉、
半開的邏輯轉換。

通用方式整合Hystrix

1.複製專案microservice-consumer-movie-ribbon,將ArtifactId修改為microservice-consumer-movie-ribbon-hystrix。

2.為專案新增hystrix依賴。

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

3.在啟動類上添加註解@EnableCircuitBreaker或@EnableHystrix,從而為專案啟用斷路器支援。

4.修改MovieController,讓其中的findById方法具備容錯能力

@RestController
public class MovieController {
    private static final Logger LOGGER = LoggerFactory.getLogger(MovieController.class
); @Autowired private RestTemplate restTemplate; @Autowired private LoadBalancerClient loadBalancerClient; @HystrixCommand(fallbackMethod = "findByIdFallback") @GetMapping("/user/{id}") public User findById(@PathVariable Long id){ return this.restTemplate.getForObject("http://users/" + id, User.class); } public User findByIdFallback(Long id) { User user = new User(); user.setId(-1L); user.setName("預設使用者"); return user; } }

有程式碼可知,為findById方法編寫一個回退方法findByIdFallback,該方法與findById方法具有相同的引數與返回值型別,該方法返回一個預設的User。
在findById方法上,使用註解@HystrixCommand的fallbackMethod屬性,指定回退方法是fallByIdFallback。

5.測試

1.啟動專案microservice-discovery-eureka。
2.啟動專案microservice-provider-user。
3.啟動專案microservice-consumer-movie-ribbon-hystrix。
4.訪問http://localhost:8010/user/1,獲得如下結果
在這裡插入圖片描述
5.停止microservice-provider-user。
6.再次訪問http://localhost:8010/user/1,獲得如下結果。
在這裡插入圖片描述

說明當使用者微服務不可用時,進入了回退方法。

本文大部分內容轉載自周立的《Spring Cloud與Docker微服務架構實戰》