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

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

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

Hystrix概述:

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

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

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

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

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

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

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

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

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

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

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

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

第一個(gè)Hystrix程序

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

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

在這里插入圖片描述

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

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

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依賴

在項(xiàng)目eureka-consumer的pom文件中添加Hystrix的依賴如下:

在這里插入圖片描述

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

添加后重新加載pom文件。

(2)添加@EnableHystrix注解

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

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

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

(4)新建service包

在service包下新建LocalItemService類

在這里插入圖片描述

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

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

(5)新建controller包

在controller包下新建LocalItemController類

在這里插入圖片描述

步驟4:項(xiàng)目測(cè)試

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

在這里插入圖片描述

在這里插入圖片描述

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

在這里插入圖片描述

在Feign中使用Hystrix

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

步驟1:開(kāi)啟Hystrix熔斷

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

開(kāi)啟Hystrix熔斷功能。在eureka-consumer項(xiàng)目的配置文件application.yml中添加開(kāi)啟熔斷的配置:

在這里插入圖片描述

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

步驟2:開(kāi)啟Feign Client功能

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

在項(xiàng)目eureka-consumer的pom文件中添加Feign的依賴如下:

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

添加后重新加載pom文件。

在eureka-consumer的啟動(dòng)類中添加@EnableFeignClients開(kāi)啟Feign Client功能。

在這里插入圖片描述

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

步驟3:修改項(xiàng)目中接口

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

在這里插入圖片描述

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

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

在這里插入圖片描述

步驟4:項(xiàng)目測(cè)試

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

在這里插入圖片描述

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

在這里插入圖片描述

在這里插入圖片描述

問(wèn)題

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

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

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

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

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

2.什么是Hystrix ?

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

主要功能包括:

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

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

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

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

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

總結(jié)

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

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

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

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

相關(guān)文章

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

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

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

    Spring Boot整合Lombok的方法詳解

    Lombok 是一種 Java 實(shí)用工具,可用來(lái)幫助開(kāi)發(fā)人員消除 Java 的冗長(zhǎng),尤其是對(duì)于簡(jiǎn)單的 Java 對(duì)象(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í)例化方式詳解

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

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

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

    解決SpringBoot log4j日志沒(méi)生成的問(wèn)題

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

    深入理解Java高級(jí)特性——注解

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

    在springboot中添加mvc功能的正確姿勢(shì)講解

    這篇文章主要介紹了在springboot中添加mvc功能的正確姿勢(shì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    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
  • 通過(guò)Java代碼技巧改善性能

    通過(guò)Java代碼技巧改善性能

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

最新評(píng)論