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

SpringCloud-Hystrix組件使用方法

 更新時間:2020年12月15日 08:46:31   作者:山丘i  
這篇文章主要介紹了SpringCloud-Hystrix組件使用方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

https://github.com/Netflix/Hystrix

在分布式環(huán)境中,許多服務依賴項不可避免地會失敗。Hystrix是一個庫,它通過添加延遲容忍和容錯邏輯來幫助您控制這些分布式服務之間的交互。Hystrix通過隔離服務之間的訪問點、停止它們之間的級聯(lián)故障以及提供后備選項來實現(xiàn)這一點,所有這些都可以提高系統(tǒng)的整體彈性。

通俗定義: Hystrix是一個用于處理分布式系統(tǒng)的延遲和容錯的開源庫,在分布式系統(tǒng)中,許多依賴不可避免的會調(diào)用失敗,超時、異常等,Hystrix能夠保證在一個依賴出問題的情況下,不會導致整體服務失敗,避免級聯(lián)故障(服務雪崩現(xiàn)象),提高分布式系統(tǒng)的彈性。

1.服務雪崩

1.服務雪崩在微服務之間進行服務調(diào)用是由于某一個服務故障,導致級聯(lián)服務故障的現(xiàn)象,稱為雪崩效應。雪崩效應描述的是提供方不可用,導致消費方不可用并將不可用逐漸放大的過程。

2.圖解雪崩效應如存在如下調(diào)用鏈路:

而此時,Service A的流量波動很大,流量經(jīng)常會突然性增加!那么在這種情況下,就算Service A能扛得住請求,Service B和Service C未必能扛得住這突發(fā)的請求。此時,如果Service C因為抗不住請求,變得不可用。那么Service B的請求也會阻塞,慢慢耗盡Service B的線程資源,Service B就會變得不可用。緊接著,Service A也會不可用,這一過程如下圖所示

2.服務熔斷

1.服務熔斷“熔斷器”本身是一種開關(guān)裝置,當某個服務單元發(fā)生故障之后,通過斷路器的故障監(jiān)控,某個異常條件被觸發(fā),直接熔斷整個服務。向調(diào)用方法返回一個符合預期的、可處理的備選響應(FallBack),而不是長時間的等待或者拋出調(diào)用方法無法處理的異常,就保證了服務調(diào)用方的線程不會被長時間占用,避免故障在分布式系統(tǒng)中蔓延,乃至雪崩。如果目標服務情況好轉(zhuǎn)則恢復調(diào)用。服務熔斷是解決服務雪崩的重要手段。

2.服務熔斷圖示

3.服務降級

1.服務降級說明

  • 服務壓力劇增的時候根據(jù)當前的業(yè)務情況及流量對一些服務和頁面有策略的降級,以此環(huán)節(jié)服務器的壓力,以保證核心任務的進行。同時保證部分甚至大部分任務客戶能得到正確的相應。也就是當前的請求處理不了了或者出錯了,給一個默認的返回。
  • 通俗: 關(guān)閉系統(tǒng)中邊緣服務 保證系統(tǒng)核心服務的正常運行 稱之為服務降級

淘寶 刪除地址 確認收貨 刪除訂單 取消支付 節(jié)省cpu 內(nèi)存

4.降級和熔斷總結(jié)

1.共同點

  • 目的很一致,都是從可用性可靠性著想,為防止系統(tǒng)的整體緩慢甚至崩潰,采用的技術(shù)手段;
  • 最終表現(xiàn)類似,對于兩者來說,最終讓用戶體驗到的是某些功能暫時不可達或不可用;
  • 粒度一般都是服務級別,當然,業(yè)界也有不少更細粒度的做法,比如做到數(shù)據(jù)持久層(允許查詢,不允許增刪改);
  • 自治性要求很高,熔斷模式一般都是服務基于策略的自動觸發(fā),降級雖說可人工干預,但在微服務架構(gòu)下,完全靠人顯然不可能,開關(guān)預置、配置中心都是必要手段;

2.異同點

  • 觸發(fā)原因不太一樣,服務熔斷一般是某個服務(下游服務)故障引起,而服務降級一般是從整體負荷考慮;
  • 管理目標的層次不太一樣,熔斷其實是一個框架級的處理,每個微服務都需要(無層級之分),而降級一般需要對業(yè)務有層級之分(比如降級一般是從最外圍服務開始)

3.總結(jié)熔斷必會觸發(fā)降級,所以熔斷也是降級一種,區(qū)別在于熔斷是對調(diào)用鏈路的保護,而降級是對系統(tǒng)過載的一種保護處理

5.服務熔斷的實現(xiàn)

服務熔斷的實現(xiàn)思路

  • 引入hystrix依賴,并開啟熔斷器(斷路器)
  • 模擬降級方法
  • 進行調(diào)用測試

1.項目中引入hystrix依賴

在商品服務下面
<!--引入hystrix-->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2.開啟斷路器

@SpringBootApplication
@EnableCircuitBreaker //用來開啟斷路器
public class Products9998Application {
 public static void main(String[] args) {
  SpringApplication.run(Products9998Application.class, args);
 }
}

3.使用HystrixCommand注解實現(xiàn)斷路

//服務熔斷
@GetMapping("/product/break")
@HystrixCommand(fallbackMethod = "testBreakFall" )
public String testBreak(int id){
 log.info("接收的商品id為: "+ id);
 if(id<=0){
 throw new RuntimeException("數(shù)據(jù)不合法!!!");
 }
 return "當前接收商品id: "+id;
}

// 觸發(fā)熔斷的方法
public String testBreakFall(int id){
 return "當前數(shù)據(jù)不合法: "+id;
}

4.訪問測試

  • 正常參數(shù)訪問
  • 錯誤參數(shù)訪問

一直使用錯誤參數(shù)訪問,那么再使用正常參數(shù)訪問也會顯示不合法,因為觸發(fā)了斷路器,但過一點時間又會自動的關(guān)閉,訪問又合法了

5.總結(jié)從上面演示過程中會發(fā)現(xiàn)如果觸發(fā)一定條件斷路器會自動打開,過了一點時間正常之后又會關(guān)閉。那么斷路器打開條件是什么呢?

6.斷路器打開條件官網(wǎng): https://cloud.spring.io/spring-cloud-netflix/2.2.x/reference/html/

A service failure in the lower level of services can cause cascading failure all the way up to the user. When calls to a particular service exceed circuitBreaker.requestVolumeThreshold (default: 20 requests) and the failure percentage is greater than circuitBreaker.errorThresholdPercentage (default: >50%) in a rolling window defined by metrics.rollingStats.timeInMilliseconds (default: 10 seconds), the circuit opens and the call is not made. In cases of error and an open circuit, a fallback can be provided by the developer.--摘自官方

原文翻譯之后,總結(jié)打開關(guān)閉的條件:

1 當滿足一定的閥值的時候(默認10秒內(nèi)超過20個請求次數(shù))

2、當失敗率達到一定的時候(默認10秒內(nèi)超過50%的請求失?。?/p>

3、到達以上閥值,斷路器將會開啟

4、當開啟的時候,所有請求都不會進行轉(zhuǎn)發(fā)5、一段時間之后(默認是5秒),這個時候斷路器是半開狀態(tài),會讓其中一個請求進行轉(zhuǎn)發(fā)。

如果成功,斷路器會關(guān)閉,若失敗,繼續(xù)開啟。重復4和5。

7.默認的服務FallBack處理方法如果為每一個服務方法開發(fā)一個降級,對于我們來說,可能會出現(xiàn)大量的代碼的冗余,不利于維護,這個時候就需要加入默認服務降級處理方法

@GetMapping("/product/hystrix")
@HystrixCommand(defaultFallback = "testHystrixFallBack") //通過HystrixCommand降級處理 指定出錯的方法
public String testHystrix(String name) {
 log.info("接收名稱為: " + name);
 int n = 1/0;
 return "服務[" + port + "]響應成功,當前接收名稱為:" + name;
}
//服務降級處理
public String testHystrixFallBack(String name) {
 return port + "當前服務已經(jīng)被降級處理!!!,接收名稱為: "+name;
}

6.服務降級的實現(xiàn)

還是再之前項目的基礎之上

1.客戶端openfeign + hystrix實現(xiàn)服務降級實現(xiàn)

  • 引入hystrix依賴
  • 配置文件開啟feign支持hystrix
  • 在feign客戶端調(diào)用加入fallback指定降級處理
  • 開發(fā)降級處理方法

2.開啟openfeign支持服務降級

feign.hystrix.enabled=true #開啟openfeign支持降級

3.在openfeign客戶端中加如Hystrix

// 創(chuàng)建一個ProductClientFallBack類實現(xiàn)這個接口,并實現(xiàn)這個接口的所有方法,為了對每個方法做不同的響應錯略
// 指定當前的接口是openfeign組件,value是調(diào)用的服務名
@FeignClient(value = "products",fallback = ProductClientFallBack.class)
public interface ProductClient {

 @GetMapping("/product/findOne")
 Map<String, Object> findOne(@RequestParam("productId") String productId);

}

4.開發(fā)fallback處理類

package com.md.fallback;

@Component
public class ProductClientFallBack implements ProductClient {

 @Override
 public Map<String, Object> findOne(String productId) {
  HashMap<String, Object> map = new HashMap<>();
  map.put("status","false");
  map.put("msg","當前查詢不可以使用,服務已經(jīng)被降級");
  return map;
 }
}

正常訪問

然后直接將產(chǎn)品服務關(guān)閉,再進行訪問

注意:如果服務端降級和客戶端降級同時開啟,要求服務端降級方法的返回值必須與客戶端方法降級的返回值一致!!!

7.Hystrix Dashboard

0.說明Hystrix Dashboard的一個主要優(yōu)點是它收集了關(guān)于每個HystrixCommand的一組度量。Hystrix儀表板以高效的方式顯示每個斷路器的運行狀況。

只是一個有UI頁面的組件,創(chuàng)建一個新的項目,還是根據(jù)之前的springcloud的環(huán)境搭建

1.項目中引入依賴

<!--引入hystrix dashboard 依賴-->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

2.入口類中開啟hystrix dashboard

@SpringBootApplication
@EnableHystrixDashboard //開啟監(jiān)控面板
public class Hystrixdashboard9990Application {
	public static void main(String[] args) {
		SpringApplication.run(Hystrixdashboard9990Application.class, args);
 }
}

在配置文件中指定端口號9990

3.啟動hystrix dashboard應用http://localhost:9990(dashboard端口)/hystrix

4.監(jiān)控的項目中入口類中加入監(jiān)控路徑配置[新版本坑],并啟動監(jiān)控項目

@Bean
public ServletRegistrationBean getServlet() {
 HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
 ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
 registrationBean.setLoadOnStartup(1);
 registrationBean.addUrlMappings("/hystrix.stream");
 registrationBean.setName("HystrixMetricsStreamServlet");
 return registrationBean;
}

5.通過監(jiān)控界面監(jiān)控

后面的hystrix.stream是固定的

6.點擊監(jiān)控,一致loading,打開控制臺發(fā)現(xiàn)報錯[特別坑]

# 解決方案
- 新版本中springcloud將jquery版本升級為3.4.1,定位到monitor.ftlh文件中,js的寫法如下:
	$(window).load(function() 
- jquery 3.4.1已經(jīng)廢棄上面寫法

- 修改方案 修改monitor.ftlh為如下調(diào)用方式:
	$(window).on("load",function()
	
- 編譯jar源文件,重新打包引入后,界面正常響應。

8.Hystrix停止維護

官方地址:https://github.com/Netflix/Hystrix

  • 翻譯:Hystrix(版本1.5.18)足夠穩(wěn)定,可以滿足Netflix對我們現(xiàn)有應用的需求。同時,我們的重點已經(jīng)轉(zhuǎn)移到對應用程序的實時性能作出反應的更具適應性的實現(xiàn),而不是預先配置的設置(例如,通過自適應并發(fā)限制)。對于像Hystrix這樣的東西有意義的情況,我們打算繼續(xù)在現(xiàn)有的應用程序中使用Hystrix,并在新的內(nèi)部項目中利用諸如resilience4j這樣的開放和活躍的項目。我們開始建議其他人也這樣做。
  • Dashboard也被廢棄

到此這篇關(guān)于SpringCloud-Hystrix組件使用方法的文章就介紹到這了,更多相關(guān)SpringCloud-Hystrix組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RocketMQ中消費者概念和消費流程詳解

    RocketMQ中消費者概念和消費流程詳解

    這篇文章主要介紹了RocketMQ中消費者概念和消費流程詳解,RocketMQ是一款高性能、高可靠性的分布式消息中間件,消費者是RocketMQ中的重要組成部分,消費者負責從消息隊列中獲取消息并進行處理,需要的朋友可以參考下
    2023-10-10
  • Win10 Java jdk14.0.2安裝及環(huán)境變量配置詳細教程

    Win10 Java jdk14.0.2安裝及環(huán)境變量配置詳細教程

    這篇文章主要介紹了Win10 Java jdk14.0.2安裝及環(huán)境變量配置,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 四個實例超詳細講解Java?貪心和枚舉的特點與使用

    四個實例超詳細講解Java?貪心和枚舉的特點與使用

    貪心算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優(yōu)上加以考慮,他所做出的是在某種意義上的局部最優(yōu)解,枚舉法的本質(zhì)就是從所有候選答案中去搜索正確的解,枚舉算法簡單粗暴,他暴力的枚舉所有可能,盡可能地嘗試所有的方法
    2022-04-04
  • JavaWeb.servlet的基本使用方法詳解

    JavaWeb.servlet的基本使用方法詳解

    Servlet指在服務器端執(zhí)行的一段Java代碼,可以接收用戶的請求和返回給用戶響應結(jié)果,下面這篇文章主要給大家介紹了關(guān)于JavaWeb.servlet基本使用的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 通過Java添加Word文本框過程詳解

    通過Java添加Word文本框過程詳解

    這篇文章主要介紹了通過Java添加Word文本框過程詳解,在Word中,文本框是指一種可移動、可調(diào)節(jié)大小的文字或圖形容器。我們可以向文本框中添加文字、圖片、表格等對象,下面,將通過Java編程來實現(xiàn)添加以上對象到Word文本框,需要的朋友可以參考下
    2019-07-07
  • Maven的國內(nèi)鏡像(快速解決jar下載過慢的問題)

    Maven的國內(nèi)鏡像(快速解決jar下載過慢的問題)

    下面小編就為大家?guī)硪黄狹aven的國內(nèi)鏡像(快速解決jar下載過慢的問題)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Spring Security 中細化權(quán)限粒度的方法

    Spring Security 中細化權(quán)限粒度的方法

    這篇文章主要介紹了Spring Security 中細化權(quán)限粒度的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • java連接Mysql數(shù)據(jù)庫的工具類

    java連接Mysql數(shù)據(jù)庫的工具類

    這篇文章主要介紹了java連接Mysql數(shù)據(jù)庫的工具類,非常的實用,推薦給大家,需要的朋友可以參考下
    2015-03-03
  • Java如何使用Iterator迭代器刪除集合重復選項

    Java如何使用Iterator迭代器刪除集合重復選項

    這篇文章主要介紹了Java如何使用Iterator迭代器刪除集合重復選項,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 一篇文章輕松搞懂Java中的自旋鎖

    一篇文章輕松搞懂Java中的自旋鎖

    隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,越來越多的互聯(lián)網(wǎng)企業(yè)面臨著用戶量膨脹而帶來的并發(fā)安全問題。這篇文章主要給大家介紹了關(guān)于Java中自旋鎖的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05

最新評論

佛学| 盐边县| 大方县| 黔东| 巴彦县| 涞源县| 陇南市| 江达县| 伊春市| 钟祥市| 阿勒泰市| 赤壁市| 贵港市| 岑巩县| 静安区| 南召县| 仲巴县| 纳雍县| 邢台市| 化州市| 吴江市| 沙坪坝区| 左权县| 远安县| 盐城市| 泉州市| 渝中区| 河曲县| 马关县| 越西县| 永修县| 江城| 新津县| 宽甸| 云浮市| 赣榆县| 肃南| 马龙县| 霍林郭勒市| 藁城市| 怀远县|