中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解SpringCloud微服務架構之Hystrix斷路器

發布時間:2020-08-27 01:19:42 來源:腳本之家 閱讀:170 作者:Bob_F 欄目:編程語言

一:什么是Hystrix

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

Hystrix旨在執行以下操作

1:對通過第三方客戶端庫訪問(通常通過網絡)的依賴關系提供保護并控制延遲和故障。

2:隔離復雜分布式系統中的級聯故障。

3:快速發現故障,盡快恢復。

4:回退,盡可能優雅地降級。

5:啟用近實時監控,警報和操作控制。

二:為什么需要Hystrix?

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

(圖片官方圖片)

當一切都健康時,請求可以看起來像這樣

詳解SpringCloud微服務架構之Hystrix斷路器

當許多后端服務系統中的一個宕掉時,整個用戶請求:

詳解SpringCloud微服務架構之Hystrix斷路器

如果多個客戶端調用同一個異常服務的時候,出現的情況是:

詳解SpringCloud微服務架構之Hystrix斷路器 

三:Hystrix解決什么問題?

分布式架構中的應用程序具有幾十個依賴關系,每個依賴關系在某個時刻將不可避免的出現異常。如果應用程序不與這些外部故障隔離,則可能出現線程池阻塞,引起系統雪崩。

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

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

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

2+小時宕機/月,即使所有依賴關系正常運行時間。

當使用Hystrix進行熔斷后,每個依賴關系彼此隔離了,限制了當發生延遲時的阻塞。

詳解SpringCloud微服務架構之Hystrix斷路器 

四:Hystrix結合Feign使用

創建一個工程eureka_feign_hystrix_client

pom.xml文件內容

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

創建啟動文件

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();
} 


創建熔斷類UserClientHystrix

@Service
public class UserClientHystrix implements UserClient {

   @Override
  public User getuserinfo() {
    throw new NullPointerException(" User getuserinfo() 服務不可用。。");

  }

  @Override
  public String getuserinfostr() {
    return " UserClientHystrix getuserinfostr() is fallback 服務不可用。。";

  }

  @Override
  public String info() {
    return " UserClientHystrix info() is fallback 服務不可用。。";

  }
} 

當網絡出現異常的時候或直接跳轉到這里實現類里面

創建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

這個時候我們明顯發現沒有運行biz-service-0 服務,那么我們 打開 http://127.0.0.1:8005/getuserinfostr

出現

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

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

如果不用熔斷 頁面會出現這個

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相關原理,由于沒有全部看完所以暫時沒有寫上去,本文是結合Feign使用和學習。

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰原市| 特克斯县| 南开区| 屏山县| 梅河口市| 山东省| 阿拉善右旗| 新和县| 普安县| 深圳市| 怀宁县| 应用必备| 安国市| 泸定县| 大足县| 二连浩特市| 扎鲁特旗| 荥阳市| 广水市| 清涧县| 伊金霍洛旗| 钟山县| 浦县| 连州市| 宾川县| 当雄县| 清水县| 河池市| 汕尾市| 德兴市| 望奎县| 山西省| 怀安县| 白沙| 电白县| 德州市| 西乌珠穆沁旗| 铜山县| 石柱| 栾川县| 赤城县|