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

SpringCloud-Hystrix組件使用方法

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

https://github.com/Netflix/Hystrix

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

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

1.服務(wù)雪崩

1.服務(wù)雪崩在微服務(wù)之間進(jìn)行服務(wù)調(diào)用是由于某一個(gè)服務(wù)故障,導(dǎo)致級(jí)聯(lián)服務(wù)故障的現(xiàn)象,稱(chēng)為雪崩效應(yīng)。雪崩效應(yīng)描述的是提供方不可用,導(dǎo)致消費(fèi)方不可用并將不可用逐漸放大的過(guò)程。

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

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

2.服務(wù)熔斷

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

2.服務(wù)熔斷圖示

3.服務(wù)降級(jí)

1.服務(wù)降級(jí)說(shuō)明

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

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

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

1.共同點(diǎn)

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

2.異同點(diǎn)

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

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

5.服務(wù)熔斷的實(shí)現(xiàn)

服務(wù)熔斷的實(shí)現(xiàn)思路

  • 引入hystrix依賴(lài),并開(kāi)啟熔斷器(斷路器)
  • 模擬降級(jí)方法
  • 進(jìn)行調(diào)用測(cè)試

1.項(xiàng)目中引入hystrix依賴(lài)

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

2.開(kāi)啟斷路器

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

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

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

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

4.訪問(wèn)測(cè)試

  • 正常參數(shù)訪問(wèn)
  • 錯(cuò)誤參數(shù)訪問(wèn)

一直使用錯(cuò)誤參數(shù)訪問(wèn),那么再使用正常參數(shù)訪問(wèn)也會(huì)顯示不合法,因?yàn)橛|發(fā)了斷路器,但過(guò)一點(diǎn)時(shí)間又會(huì)自動(dòng)的關(guān)閉,訪問(wèn)又合法了

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

6.斷路器打開(kāi)條件官網(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é)打開(kāi)關(guān)閉的條件:

1 當(dāng)滿(mǎn)足一定的閥值的時(shí)候(默認(rèn)10秒內(nèi)超過(guò)20個(gè)請(qǐng)求次數(shù))

2、當(dāng)失敗率達(dá)到一定的時(shí)候(默認(rèn)10秒內(nèi)超過(guò)50%的請(qǐng)求失敗)

3、到達(dá)以上閥值,斷路器將會(huì)開(kāi)啟

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

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

7.默認(rèn)的服務(wù)FallBack處理方法如果為每一個(gè)服務(wù)方法開(kāi)發(fā)一個(gè)降級(jí),對(duì)于我們來(lái)說(shuō),可能會(huì)出現(xiàn)大量的代碼的冗余,不利于維護(hù),這個(gè)時(shí)候就需要加入默認(rèn)服務(wù)降級(jí)處理方法

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

6.服務(wù)降級(jí)的實(shí)現(xiàn)

還是再之前項(xiàng)目的基礎(chǔ)之上

1.客戶(hù)端openfeign + hystrix實(shí)現(xiàn)服務(wù)降級(jí)實(shí)現(xiàn)

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

2.開(kāi)啟openfeign支持服務(wù)降級(jí)

feign.hystrix.enabled=true #開(kāi)啟openfeign支持降級(jí)

3.在openfeign客戶(hù)端中加如Hystrix

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

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

}

4.開(kāi)發(fā)fallback處理類(lèi)

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","當(dāng)前查詢(xún)不可以使用,服務(wù)已經(jīng)被降級(jí)");
  return map;
 }
}

正常訪問(wèn)

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

注意:如果服務(wù)端降級(jí)和客戶(hù)端降級(jí)同時(shí)開(kāi)啟,要求服務(wù)端降級(jí)方法的返回值必須與客戶(hù)端方法降級(jí)的返回值一致!!!

7.Hystrix Dashboard

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

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

1.項(xiàng)目中引入依賴(lài)

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

2.入口類(lèi)中開(kāi)啟hystrix dashboard

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

在配置文件中指定端口號(hào)9990

3.啟動(dòng)hystrix dashboard應(yīng)用http://localhost:9990(dashboard端口)/hystrix

4.監(jiān)控的項(xiàng)目中入口類(lèi)中加入監(jiān)控路徑配置[新版本坑],并啟動(dòng)監(jiān)控項(xiàng)目

@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.通過(guò)監(jiān)控界面監(jiān)控

后面的hystrix.stream是固定的

6.點(diǎn)擊監(jiān)控,一致loading,打開(kāi)控制臺(tái)發(fā)現(xiàn)報(bào)錯(cuò)[特別坑]

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

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

8.Hystrix停止維護(hù)

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

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

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

相關(guān)文章

  • java壓縮文件與刪除文件的示例代碼

    java壓縮文件與刪除文件的示例代碼

    這篇文章主要介紹了java壓縮文件與刪除文件的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java多線程中的ThreadPoolExecutor解讀

    Java多線程中的ThreadPoolExecutor解讀

    這篇文章主要介紹了Java多線程中的ThreadPoolExecutor解讀,線程池中的核心線程數(shù),當(dāng)提交一個(gè)任務(wù)時(shí),線程池創(chuàng)建一個(gè)新線程執(zhí)行任務(wù),直到當(dāng)前線程數(shù)等于corePoolSize;如果當(dāng)前線程數(shù)為corePoolSize,繼續(xù)提交的任務(wù)被保存到阻塞隊(duì)列中,等待被執(zhí)行,需要的朋友可以參考下
    2023-09-09
  • 深入講解SpringBoot Actuator是什么

    深入講解SpringBoot Actuator是什么

    Spring Boot Actuator提供了生產(chǎn)上經(jīng)常用到的功能(如健康檢查,審計(jì),指標(biāo)收集,HTTP跟蹤等),幫助我們監(jiān)控和管理Spring Boot應(yīng)用程序。這些功能都可以通過(guò)JMX或HTTP端點(diǎn)訪問(wèn)
    2023-01-01
  • java學(xué)習(xí)筆記之eclipse+tomcat 配置

    java學(xué)習(xí)筆記之eclipse+tomcat 配置

    俗話說(shuō):工欲善其事必先利其器,既然要學(xué)習(xí)java,首先把java的開(kāi)發(fā)環(huán)境搗鼓一下吧,這里我們來(lái)談?wù)別clipse+tomcat的配置方法。
    2014-11-11
  • 一文掌握J(rèn)ava開(kāi)發(fā)工具M(jìn)aven(簡(jiǎn)單上手)

    一文掌握J(rèn)ava開(kāi)發(fā)工具M(jìn)aven(簡(jiǎn)單上手)

    掌握maven的相關(guān)知識(shí)是Java開(kāi)發(fā)必備的技能,今天通過(guò)本文從入門(mén)安裝開(kāi)始,逐步深入講解maven的相關(guān)知識(shí),包括maven的安裝到簡(jiǎn)單上手maven項(xiàng)目開(kāi)發(fā),感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • springmvc+shiro+maven 實(shí)現(xiàn)登錄認(rèn)證與權(quán)限授權(quán)管理

    springmvc+shiro+maven 實(shí)現(xiàn)登錄認(rèn)證與權(quán)限授權(quán)管理

    Shiro 是一個(gè) Apache 下的一開(kāi)源項(xiàng)目項(xiàng)目,旨在簡(jiǎn)化身份驗(yàn)證和授權(quán),下面通過(guò)實(shí)例代碼給大家分享springmvc+shiro+maven 實(shí)現(xiàn)登錄認(rèn)證與權(quán)限授權(quán)管理,感興趣的朋友一起看看吧
    2017-09-09
  • Mybatis Order by動(dòng)態(tài)參數(shù)防注入方式

    Mybatis Order by動(dòng)態(tài)參數(shù)防注入方式

    這篇文章主要介紹了Mybatis Order by動(dòng)態(tài)參數(shù)防注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 詳解非spring框架下使用querydsl的方法

    詳解非spring框架下使用querydsl的方法

    Querydsl是一個(gè)采用API代替拼湊字符串來(lái)構(gòu)造查詢(xún)語(yǔ)句,可跟 Hibernate 和 JPA 等框架結(jié)合使用。本文介紹的是非spring環(huán)境下querydsl JPA整合使用,感興趣的小伙伴們可以參考一下
    2019-01-01
  • springboot 中 thymeleaf 常用的語(yǔ)法完整實(shí)例

    springboot 中 thymeleaf 常用的語(yǔ)法完整實(shí)例

    在 Spring Boot 項(xiàng)目中,Thymeleaf 是一個(gè)常用的模板引擎,它提供了豐富的語(yǔ)法來(lái)動(dòng)態(tài)渲染 HTML 頁(yè)面,下面給大家介紹springboot 中 thymeleaf 常用的語(yǔ)法完整實(shí)例,感興趣的朋友一起看看吧
    2024-03-03
  • Java中SpringCloud的五大組件詳解

    Java中SpringCloud的五大組件詳解

    這篇文章主要介紹了Java中SpringCloud的五大組件詳解,Spring cloud是一個(gè)基于Spring Boot實(shí)現(xiàn)的服務(wù)治理工具包,在微服務(wù)架構(gòu)中用于管理和協(xié)調(diào)服務(wù),需要的朋友可以參考下
    2023-07-07

最新評(píng)論