国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

詳解SpringCloud微服務(wù)架構(gòu)之Hystrix斷路器

2024-07-13 10:16:21
字體:
供稿:網(wǎng)友

一:什么是Hystrix

在分布式環(huán)境中,許多服務(wù)依賴項(xiàng)中的一些將不可避免地失敗。Hystrix是一個(gè)庫(kù),通過添加延遲容差和容錯(cuò)邏輯來幫助您控制這些分布式服務(wù)之間的交互。Hystrix通過隔離服務(wù)之間的訪問點(diǎn),停止其間的級(jí)聯(lián)故障以及提供回退選項(xiàng),從而提高系統(tǒng)的整體彈性。

Hystrix旨在執(zhí)行以下操作

1:對(duì)通過第三方客戶端庫(kù)訪問(通常通過網(wǎng)絡(luò))的依賴關(guān)系提供保護(hù)并控制延遲和故障。

2:隔離復(fù)雜分布式系統(tǒng)中的級(jí)聯(lián)故障。

3:快速發(fā)現(xiàn)故障,盡快恢復(fù)。

4:回退,盡可能優(yōu)雅地降級(jí)。

5:?jiǎn)⒂媒鼘?shí)時(shí)監(jiān)控,警報(bào)和操作控制。

二:為什么需要Hystrix?

大型分布式系統(tǒng)中,一個(gè)客戶端或者服務(wù)依賴外部服務(wù),如果一個(gè)服務(wù)宕了,那么由于我們?cè)O(shè)置了服務(wù)調(diào)用系統(tǒng)超時(shí)時(shí)間,勢(shì)必會(huì)影響相應(yīng)時(shí)間,在高并發(fā)的情況下大多數(shù)服務(wù)器的線程池就出現(xiàn)阻塞(BLOCK),影響整個(gè)線上服務(wù)的穩(wěn)定性。

(圖片官方圖片)

當(dāng)一切都健康時(shí),請(qǐng)求可以看起來像這樣

Spring,Cloud,Hystrix,斷路器

當(dāng)許多后端服務(wù)系統(tǒng)中的一個(gè)宕掉時(shí),整個(gè)用戶請(qǐng)求:

Spring,Cloud,Hystrix,斷路器

如果多個(gè)客戶端調(diào)用同一個(gè)異常服務(wù)的時(shí)候,出現(xiàn)的情況是:

Spring,Cloud,Hystrix,斷路器

三:Hystrix解決什么問題?

分布式架構(gòu)中的應(yīng)用程序具有幾十個(gè)依賴關(guān)系,每個(gè)依賴關(guān)系在某個(gè)時(shí)刻將不可避免的出現(xiàn)異常。如果應(yīng)用程序不與這些外部故障隔離,則可能出現(xiàn)線程池阻塞,引起系統(tǒng)雪崩。

例如,對(duì)于依賴30個(gè)服務(wù)的應(yīng)用程序,每個(gè)服務(wù)的正常運(yùn)行時(shí)間為99.99%,您可以:

99.99%的30次方 = 99.7%正常運(yùn)行時(shí)間

0.3%的10億次請(qǐng)求= 3,000,000次故障

2+小時(shí)宕機(jī)/月,即使所有依賴關(guān)系正常運(yùn)行時(shí)間。

當(dāng)使用Hystrix進(jìn)行熔斷后,每個(gè)依賴關(guān)系彼此隔離了,限制了當(dāng)發(fā)生延遲時(shí)的阻塞。

Spring,Cloud,Hystrix,斷路器

四:Hystrix結(jié)合Feign使用

創(chuàng)建一個(gè)工程eureka_feign_hystrix_client

pom.xml文件內(nèi)容

<dependencies>    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-feign</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-eureka</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-actuator</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-test</artifactId>      <scope>test</scope>    </dependency>  </dependencies>  <dependencyManagement>    <dependencies>      <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-dependencies</artifactId>        <version>Brixton.SR5</version>        <type>pom</type>        <scope>import</scope>      </dependency>    </dependencies>  </dependencyManagement> 

創(chuàng)建啟動(dòng)文件

FeignHystrixApplication

@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class FeignHystrixApplication {  public static void main(String[] args) {    SpringApplication.run(FeignHystrixApplication.class, args);  }} 

UserClient類

@FeignClient(value = "biz-service-0",fallback = UserClientHystrix.class)public interface UserClient {  @RequestMapping(method = RequestMethod.GET, value = "/getuser")  public User getuserinfo();  @RequestMapping(method = RequestMethod.GET, value = "/getuser")  public String getuserinfostr();  @RequestMapping(method = RequestMethod.GET, value = "/info")  public String info();} 

創(chuàng)建熔斷類UserClientHystrix

@Servicepublic class UserClientHystrix implements UserClient {   @Override  public User getuserinfo() {    throw new NullPointerException(" User getuserinfo() 服務(wù)不可用。。");  }  @Override  public String getuserinfostr() {    return " UserClientHystrix getuserinfostr() is fallback 服務(wù)不可用。。";  }  @Override  public String info() {    return " UserClientHystrix info() is fallback 服務(wù)不可用。。";  }} 

當(dāng)網(wǎng)絡(luò)出現(xiàn)異常的時(shí)候或直接跳轉(zhuǎn)到這里實(shí)現(xiàn)類里面

創(chuàng)建action類

UserController

@Autowired  UserClient userClient;  @RequestMapping(value = "/getuserinfo", method = RequestMethod.GET)  public User getuserinfo() {    return userClient.getuserinfo();  }  @RequestMapping(value = "/getuserinfostr", method = RequestMethod.GET)  public String getuserinfostr() {    return userClient.getuserinfostr();  }  @RequestMapping(value = "/info", method = RequestMethod.GET)  public String info() {    return userClient.info();  } 

先啟動(dòng):eureka_register_service(注冊(cè)中心)工程

然后運(yùn)行我們寫好的FeignHystrixApplication

這個(gè)時(shí)候我們明顯發(fā)現(xiàn)沒有運(yùn)行biz-service-0 服務(wù),那么我們 打開 http://127.0.0.1:8005/getuserinfostr

出現(xiàn)

UserClientHystrix getuserinfostr() is fallback 服務(wù)不可用。。

這個(gè)就是我們自定義的熔斷返回結(jié)果

如果不用熔斷 頁面會(huì)出現(xiàn)這個(gè)

Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback.Wed Mar 22 14:32:21 CST 2017There was an unexpected error (type=Internal Server Error, status=500).getuserinfo failed and fallback failed. 

代碼地址:https://github.com/zhp8341/SpringCloudDemo

本人也看了一些Hystrix相關(guān)原理,由于沒有全部看完所以暫時(shí)沒有寫上去,本文是結(jié)合Feign使用和學(xué)習(xí)。

有興起的可以看下官方的Hystrix很詳細(xì),就是看起來有點(diǎn)費(fèi)勁,

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 望谟县| 宁武县| 黄梅县| 朔州市| 寿光市| 和田县| 崇阳县| 永顺县| 香港 | 贵定县| 来宾市| 诸暨市| 大田县| 通海县| 舞钢市| 平舆县| 开封市| 延寿县| 西青区| 乳源| 子洲县| 泰安市| 博野县| 彭山县| 鄂托克前旗| 崇义县| 宁陕县| 潞城市| 绍兴市| 三亚市| 辽源市| 舞阳县| 婺源县| 沂南县| 乌拉特中旗| 凤庆县| 广德县| 澎湖县| 台中县| 芷江| 桂林市|