最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年01月10日 14:54:14   作者:Bob_F  
本篇文章主要介紹了詳解SpringCloud微服務(wù)架構(gòu)之Hystrix斷路器,Hystrix是一個庫,通過添加延遲容差和容錯邏輯來幫助您控制這些分布式服務(wù)之間的交互,有興趣的可以了解一下

一:什么是Hystrix

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

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

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

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

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

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

5:啟用近實時監(jiān)控,警報和操作控制。

二:為什么需要Hystrix?

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

(圖片官方圖片)

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

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

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

 

三:Hystrix解決什么問題?

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

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

99.99%的30次方 = 99.7%正常運行時間

0.3%的10億次請求= 3,000,000次故障

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

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

 

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

創(chuàng)建一個工程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)建啟動文件

FeignHystrixApplication

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public 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

@Service
public 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)異常的時候或直接跳轉(zhuǎn)到這里實現(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();
  } 

先啟動:eureka_register_service(注冊中心)工程

然后運行我們寫好的FeignHystrixApplication

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

出現(xiàn)

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

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

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

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Mar 22 14:32:21 CST 2017

There was an unexpected error (type=Internal Server Error, status=500).

getuserinfo failed and fallback failed. 

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java?-jar參數(shù)設(shè)置小結(jié)

    Java?-jar參數(shù)設(shè)置小結(jié)

    本文主要介紹了Java?-jar參數(shù)設(shè)置小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • java?mybatis如何操作postgresql?array數(shù)組類型

    java?mybatis如何操作postgresql?array數(shù)組類型

    這篇文章主要介紹了java?mybatis如何操作postgresql?array數(shù)組類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 使用mybatis-plus分頁出現(xiàn)兩個Limit的問題解決

    使用mybatis-plus分頁出現(xiàn)兩個Limit的問題解決

    在使用MyBatis-Plus進(jìn)行分頁查詢時,可能會遇到查詢SQL中出現(xiàn)兩個limit語句的問題,這通常是由于在多個模塊中重復(fù)引入了MyBatis-Plus的分頁插件所導(dǎo)致的,下面就來介紹一下如何解決,感興趣的可以了解一下
    2024-10-10
  • Java中實現(xiàn)多重排序的幾種方法小結(jié)

    Java中實現(xiàn)多重排序的幾種方法小結(jié)

    Java中的多重排序通常指的是同時對一個集合中的兩個或更多列或多維度的數(shù)據(jù)進(jìn)行排序,這通常通過自定義Comparator實現(xiàn),可以結(jié)合Arrays.sort()或Collections.sort()方法,當(dāng)需要進(jìn)行多重排序時,即根據(jù)多個字段進(jìn)行排序,我們可以采用以下幾種方法
    2024-10-10
  • SpringBoot3整合SpringCloud啟動后nacos報錯獲取不到配置、無法注冊服務(wù)的解決方案

    SpringBoot3整合SpringCloud啟動后nacos報錯獲取不到配置、無法注冊服務(wù)的解決方案

    文章介紹了如何使用Spring Boot 3.3.4和Spring Cloud 2023.0.3搭建微服務(wù)項目,并解決與Nacos服務(wù)注冊發(fā)現(xiàn)和配置中心的集成問題,主要解決了依賴版本不兼容、配置文件導(dǎo)入問題及服務(wù)注冊失敗等問題,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • Java如何優(yōu)雅地關(guān)閉資源try-with-resource及其異常抑制

    Java如何優(yōu)雅地關(guān)閉資源try-with-resource及其異常抑制

    這篇文章主要介紹了Java如何優(yōu)雅地關(guān)閉資源try-with-resource及其異常抑制,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Java之Scanner.nextLine()讀取回車的問題及解決

    Java之Scanner.nextLine()讀取回車的問題及解決

    這篇文章主要介紹了Java之Scanner.nextLine()讀取回車的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java中g(shù)etParameterTypes()方法的使用與原理分析

    Java中g(shù)etParameterTypes()方法的使用與原理分析

    本文詳細(xì)介紹了Java中g(shù)etParameterTypes()方法的使用方式、工作原理及其在實際開發(fā)中的應(yīng)用,該方法用于獲取方法的參數(shù)類型列表,并通過反射機(jī)制在運行時動態(tài)地獲取這些信息,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • java多線程從入門到精通看這篇就夠了

    java多線程從入門到精通看這篇就夠了

    熟悉 Java 多線程編程的同學(xué)都知道,當(dāng)我們線程創(chuàng)建過多時,容易引發(fā)內(nèi)存溢出,因此我們就有必要使用線程池的技術(shù)了,今天通過本文給大家分享java多線程從入門到精通的相關(guān)知識,一起看看吧
    2021-06-06
  • Java小程序賽馬游戲?qū)崿F(xiàn)過程詳解

    Java小程序賽馬游戲?qū)崿F(xiàn)過程詳解

    這篇文章主要介紹了Java小程序賽馬游戲?qū)崿F(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03

最新評論

瑞金市| 铁力市| 城市| 广汉市| 麦盖提县| 盈江县| 嘉鱼县| 驻马店市| 余江县| 顺义区| 石屏县| 延津县| 盱眙县| 肥西县| 通河县| 井研县| 河北省| 涿鹿县| 阿尔山市| 石泉县| 东丰县| 湘潭县| 安龙县| 宁武县| 建宁县| 阜南县| 甘肃省| 改则县| 临潭县| 邹城市| 卓尼县| 乌恰县| 河北省| 迁西县| 怀仁县| 库尔勒市| 金秀| 南汇区| 固安县| 克拉玛依市| 襄樊市|