欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Cloud  Hystrix實(shí)現(xiàn)服務(wù)容錯的方法

 更新時間:2024年10月18日 14:26:57   作者:布說在見  
Hystrix是SpringCloud中重要的熔斷保護(hù)組件,由Netflix開源,主要提供延遲和容錯管理,以保障分布式系統(tǒng)的高可用性和魯棒性,通過封裝依賴項實(shí)現(xiàn)服務(wù)間隔離,引入回退邏輯應(yīng)對依賴服務(wù)故障,有效防止系統(tǒng)崩潰和服務(wù)級聯(lián)故障

Hystrix概述:

作為Spring Cloud體系內(nèi)實(shí)現(xiàn)熔斷機(jī)制的關(guān)鍵組件,Hystrix承擔(dān)著服務(wù)容錯保護(hù)的重要職責(zé)。

它由Netflix開源,旨在為分布式系統(tǒng)提供延遲處理和容錯解決方案。

其核心作用在于引入延遲容忍與容錯邏輯,精細(xì)管理分布式服務(wù)間的交互,確保系統(tǒng)的高可用性和魯棒性。

在復(fù)雜分布式系統(tǒng)環(huán)境中,往往涉及數(shù)十個應(yīng)用,這些應(yīng)用依賴于多個項目。

不可避免地,每個依賴項目都有可能在某個時刻遭遇失敗并觸發(fā)故障。

若未對這些故障實(shí)施有效隔離措施,整個分布式系統(tǒng)可能面臨崩潰風(fēng)險。

在分布式系統(tǒng)中,當(dāng)某個環(huán)節(jié)出現(xiàn)延遲時,可能會阻塞整個用戶請求。

特別是在高流量情況下,后端依賴的延遲可能迅速導(dǎo)致全部服務(wù)資源在短短幾秒內(nèi)耗盡,從而無法處理后續(xù)請求,使應(yīng)用發(fā)生故障。

更嚴(yán)重的是,這些問題還可能引發(fā)服務(wù)間延遲累積,占用備份隊列、線程等關(guān)鍵資源,觸發(fā)連鎖反應(yīng)般的級聯(lián)故障。

為應(yīng)對這些挑戰(zhàn),Hystrix應(yīng)運(yùn)而生。

它通過封裝每一個依賴項,實(shí)現(xiàn)它們之間的相互隔離。

一旦延遲發(fā)生,問題被限制在局部資源中,并包含回退邏輯,該邏輯決定在依賴失敗時應(yīng)采取何種措施,確保系統(tǒng)的穩(wěn)定性。

第一個Hystrix程序

步驟1:創(chuàng)建父工程hystrix-1

將搭建的Eureka基本應(yīng)用中的3個子項目都復(fù)制到hystrix-1父工程中,并依次添加為Maven項目。

在這里插入圖片描述

步驟2:改造服務(wù)提供者

在服務(wù)提供者eureka-provider中創(chuàng)建controller包,并在該包下創(chuàng)建HystrixController類,該類定義了一個demo ()方法,用于處理路徑為/demo的請求。

HystrixController類的內(nèi)容如下:

在這里插入圖片描述

步驟3:改造服務(wù)消費(fèi)者為Hystrix客戶端

流程:

(1)添加Hystrix依賴

(2)添加@EnableHystrix注解

(3)創(chuàng)建Config配置類

(4)創(chuàng)建Service層類

(5)創(chuàng)建Controller層類

(1)添加Hystrix依賴

在項目eureka-consumer的pom文件中添加Hystrix的依賴如下:

在這里插入圖片描述

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

添加后重新加載pom文件。

(2)添加@EnableHystrix注解

在啟動類EurekaConsumerApplication中添加@EnableHystrix注解啟動熔斷功能。
在這里插入圖片描述

(3)創(chuàng)建Config配置類

在eureka-consumer中創(chuàng)建config包,并在該包下創(chuàng)建類HystrixConfig。在HystrixConfig類中注入restTemplate的Bean對象。

(4)新建service包

在service包下新建LocalItemService類

在這里插入圖片描述

被@HystrixCommand注解修飾的demo()方法就啟動了Hystrix熔斷器的功能fallbackMethod屬性定義的是處理回退(fallback)邏輯的方法。如果必須在fallback邏輯方法中遠(yuǎn)程調(diào)度其他服務(wù),最好在遠(yuǎn)程調(diào)度其他服務(wù)時,也加上熔斷器。

注:@Autowired注解不能運(yùn)行時可換成@Resource注解,按Bean的名稱裝配。

(5)新建controller包

在controller包下新建LocalItemController類

在這里插入圖片描述

步驟4:項目測試

啟動服務(wù)并進(jìn)行測試。依次啟動eureka-server,eureka-provider,eureka-consumer,在瀏覽器輸入http://localhost:7006/demo?name=布說,觀察瀏覽器顯示的效果。

在這里插入圖片描述

在這里插入圖片描述

關(guān)閉服務(wù)提供者eureka-provider,制造服務(wù)不可用的情形。再次請求 以上地址,觀察瀏覽器顯示的效果。

在這里插入圖片描述

在Feign中使用Hystrix

創(chuàng)建父工程hystrix-2,將上述中的3個子項目都復(fù)制到hystrix-2父工程中,并依次添加為Maven項目。

步驟1:開啟Hystrix熔斷

Feign自帶熔斷功能,默認(rèn)情況下,熔斷功能是關(guān)閉的。如果要開啟熔斷,只需在配置文件中將hystrix.enabled設(shè)置為true即可。

開啟Hystrix熔斷功能。在eureka-consumer項目的配置文件application.yml中添加開啟熔斷的配置:

在這里插入圖片描述

注:因?yàn)樵贔eign的起步依賴中引入了Hystrix依賴,所以在Feign中使用Hystrix不需要引入任何的依賴,只需要在配置文件中開啟即可。

步驟2:開啟Feign Client功能

因?yàn)槭褂肍eign組件調(diào)用,需要在eureka-consumer項目的pom文件中加入feign依賴。

在項目eureka-consumer的pom文件中添加Feign的依賴如下:

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

添加后重新加載pom文件。

在eureka-consumer的啟動類中添加@EnableFeignClients開啟Feign Client功能。

在這里插入圖片描述

注:使用fallback屬性指定的用于處理回退邏輯的類,必須實(shí)現(xiàn)@FeignClient注解修飾的接口。

步驟3:修改項目中接口

在service包中新建失敗邏輯處理類LocalbushuoServiceImpl,并實(shí)現(xiàn)被@FeignClient修飾的LocalItemService接口。

在這里插入圖片描述

進(jìn)入項目eureka-consumer,刪除掉之前的LocalItemService類。創(chuàng)建LocalItemService接口,并在上方的@FeignClient注解中,增加fallback屬性配置,指定LocalItemServiceImpl類為失敗邏輯處理類。

注:使用fallback屬性指定的用于處理回退邏輯的類,必須實(shí)現(xiàn)@FeignClient注解修飾的接口。

在這里插入圖片描述

步驟4:項目測試

啟動服務(wù)并進(jìn)行測試。依次啟動eureka-server,eureka-provider,eureka-consumer,在瀏覽器輸入http://localhost:7006/demo?name=www,觀察瀏覽器顯示的效果。

在這里插入圖片描述

關(guān)閉服務(wù)提供者eureka-provider,制造服務(wù)不可用的情形。再次請求 以上地址,觀察瀏覽器顯示的效果。

在這里插入圖片描述

在這里插入圖片描述

問題

1.Hystrix 是怎么實(shí)現(xiàn)服務(wù)容錯的?

Hystrix 主要通過以下幾點(diǎn)實(shí)現(xiàn)服務(wù)容錯:

斷路器模式:當(dāng)依賴服務(wù)頻繁失敗時,斷路器會打開,直接拒絕請求,防止系統(tǒng)因等待響應(yīng)而耗盡資源。當(dāng)服務(wù)恢復(fù)后,斷路器會進(jìn)入半開狀態(tài),逐步恢復(fù)請求。(上述程序就是)

資源隔離:使用線程池或信號量隔離來限制依賴服務(wù)的請求,防止一個服務(wù)的問題影響到整個系統(tǒng)。
Fallback 機(jī)制:當(dāng)依賴服務(wù)不可用時,提供一個備用響應(yīng)(Fallback),確保請求不會完全失敗,而是返回一個默認(rèn)值或備用結(jié)果。

超時與重試:設(shè)置請求超時時間,超出時間直接返回錯誤;對于臨時故障,可以配置重試機(jī)制。

2.什么是Hystrix ?

Hystrix 是一個由 Netflix 開發(fā)的開源庫,用于提高分布式系統(tǒng)的服務(wù)彈性和可靠性。它通過增加延遲容忍和容錯邏輯來防止級聯(lián)故障。

主要功能包括:

斷路器:監(jiān)測依賴服務(wù)的故障,當(dāng)檢測到故障時,阻止請求發(fā)送到有問題的服務(wù)上,避免級聯(lián)故障。

資源隔離:使用線程池隔離或信號量隔離來限制服務(wù)調(diào)用的資源消耗,防止系統(tǒng)不穩(wěn)定。

Fallback 回退機(jī)制:配置備用響應(yīng)(Fallback),當(dāng)依賴服務(wù)故障時返回備用結(jié)果,確保請求不會完全失敗。

監(jiān)控與儀表盤:提供實(shí)時監(jiān)控數(shù)據(jù),如延遲和錯誤率,并通過 Hystrix Dashboard 展示,幫助監(jiān)控系統(tǒng)狀態(tài)。

Hystrix 常與 Spring Cloud 集成,用于構(gòu)建高可用和高彈性的微服務(wù)架構(gòu)。盡管 Netflix 已停止維護(hù) Hystrix,但它在許多現(xiàn)有項目中仍然廣泛使用。

總結(jié)

每個微服務(wù)都需要獨(dú)立部署,管理多個環(huán)境和配置,這無疑增加了部署的復(fù)雜性。

由于系統(tǒng)由眾多微服務(wù)構(gòu)成,一旦發(fā)生故障,定位問題的時間會相應(yīng)增加,監(jiān)控和故障排查的難度也隨之增大。

此外,不同微服務(wù)對資源的需求各不相同,需要合理分配以避免資源浪費(fèi)或不足。

到此這篇關(guān)于Spring Cloud Hystrix實(shí)現(xiàn)優(yōu)雅的服務(wù)容錯的文章就介紹到這了,更多相關(guān)Spring Cloud Hystrix服務(wù)容錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java查詢時間段(startTime--endTime)間的數(shù)據(jù)方式

    Java查詢時間段(startTime--endTime)間的數(shù)據(jù)方式

    這篇文章主要介紹了Java查詢時間段(startTime--endTime)間的數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring Boot整合Lombok的方法詳解

    Spring Boot整合Lombok的方法詳解

    Lombok 是一種 Java 實(shí)用工具,可用來幫助開發(fā)人員消除 Java 的冗長,尤其是對于簡單的 Java 對象(POJO)。這篇文章主要介紹了Spring Boot整合Lombok,需要的朋友可以參考下
    2021-04-04
  • java中this的用法示例(關(guān)鍵字this)

    java中this的用法示例(關(guān)鍵字this)

    這篇文章主要介紹了java中this的用法示例(關(guān)鍵字this),需要的朋友可以參考下
    2014-03-03
  • Spring?Bean獲取方式的實(shí)例化方式詳解

    Spring?Bean獲取方式的實(shí)例化方式詳解

    工作中需要對一個原本加載屬性文件的工具類修改成對數(shù)據(jù)庫的操作當(dāng)然,ado層已經(jīng)寫好,但是需要從Spring中獲取bean,然而,工具類并沒有交給Spring來管理,所以需要通過方法獲取所需要的bean。于是整理了Spring獲取bean的幾種方法
    2023-03-03
  • JDK都出到14了,你有什么理由不會函數(shù)式編程(推薦)

    JDK都出到14了,你有什么理由不會函數(shù)式編程(推薦)

    這篇文章主要介紹了JDK都出到14了,你有什么理由不會函數(shù)式編程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 解決SpringBoot log4j日志沒生成的問題

    解決SpringBoot log4j日志沒生成的問題

    這篇文章主要介紹了解決SpringBoot log4j日志沒生成的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 深入理解Java高級特性——注解

    深入理解Java高級特性——注解

    這篇文章主要介紹了Java高級特性——注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 在springboot中添加mvc功能的正確姿勢講解

    在springboot中添加mvc功能的正確姿勢講解

    這篇文章主要介紹了在springboot中添加mvc功能的正確姿勢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java使用BigDecimal精確運(yùn)算浮點(diǎn)數(shù)

    Java使用BigDecimal精確運(yùn)算浮點(diǎn)數(shù)

    這篇文章主要介紹了Java使用BigDecimal精確運(yùn)算浮點(diǎn)數(shù),幫助大家更好的處理浮點(diǎn)數(shù)數(shù)據(jù),感興趣的朋友可以了解下
    2020-10-10
  • 通過Java代碼技巧改善性能

    通過Java代碼技巧改善性能

    在本篇文章里小編給大家分享了關(guān)于通過Java代碼技巧改善性能的相關(guān)知識點(diǎn),需要的朋友們參考下。
    2019-05-05

最新評論