第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Hystrix 配置項講解(一)

1. 前言

Hystrix 作為一款微服務監(jiān)控與治理工具,針對與微服務復雜性的特點,其提供了很多與微服務監(jiān)控和治理相關(guān)的配置項。通過在項目中配置這些配置項,可以很好地管理我們的微服務項目,對微服務的監(jiān)控與治理都能起到一定的積極作用。

鑒于 Hystrix 配置項繁多的特點,所以我將 Hystrix 配置項的講解分為了兩個小節(jié),分別是:基礎配置項講解、其他配置項講解。本文會首先基于 Hystrix 的基礎配置項進行詳細地介紹。

本節(jié)主要內(nèi)容:

  • Hystrix 配置項概覽;

  • Hystrix 常用配置項注解詳解。

希望同學們可以完全掌握本節(jié)內(nèi)容。

2. Hystrix 配置項概覽

Hystrix 的配置項分為,Hystrix 原生官網(wǎng)配置、整合 Spring Cloud 注解配置,這兩種情況。前者適合學習原生 Hystrix 應用方法,但該類型配置項繁多,分不清主次,所以不適合新手學習;后者適合學習 Hystrix 與實際業(yè)務場景的應用,由于 Spring Cloud 對 Hystrix 的配置項進行了過濾,所以,新手學起來更簡單。

鑒于此,本節(jié)會介紹整合了 Spring Cloud 框架的 Hystrix 各個配置項的基本定義,以及各個配置項的基本使用,初學者在學完本節(jié)內(nèi)容之后,可以基本的來配置 Hystrix 。

接下來就讓我們來看看都有哪些基礎配置吧。

3. Hystrix 常用配置項注解詳解

Hystrix 常用基礎配置項注解如下表所示:

注解名稱 適用位置 作用
@EnableHystrix 通知應用使用 Hystrix 熔斷器
@EnableHystrixDashboard 通知應用使用 Hystrix 服務監(jiān)控臺
@HystrixCommand 方法 設置方法的服務容錯機制
@HystrixProperty 方法 設置 Hystrix 中的參數(shù)
@HystrixCollapser 方法 合并請求

3.1 EnableHystrix 注解詳解

@EnableHystrix 注解是在 Spring Cloud 框架中使用 Hystrix 的基礎必須注解,即如果想要在 Spring Cloud 框架中使用 Hystrix ,就必須要先聲明 @EnableHystrix 注解,來告訴 Spring Cloud 框架,你要在其中使用 Hystrix 了。

EnableHystrix 注解是作用在類上的注解,該注解沒有任何參數(shù),可以理解為,只是一個在 Spring Cloud 框架中來開啟或關(guān)閉 Hystrix 的開關(guān),具體用法我們看以下代碼。

@EnableHystrix
public class DemoApplication {
    // 現(xiàn)在,同學們不需要理解main方法,重點看所使用的注解即可
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

代碼解釋:

第 1 行,我們將 @EnableHystrix 注解放到了 Spring Boot 項目的啟動類上,這就表示,我們開啟了 Hystrix ,即我們可以在項目中使用 Hystrix 了。

Tips: 在 Spring Boot 項目中,如果想使用 Hystrix ,就一定先要在項目的啟動類上,添加上述注解,否則,即使將 Hystrix 的依賴引入到了項目中,也無法使用 Hystrix 及任何功能特性。

3.2 EnableHystrixDashboard 注解詳解

@EnableHystrixDashboard 注解和 @EnableHystrix 注解的作用類似,即也可以理解為它是一個開關(guān),用來控制在項目中是否使用 HstrixDasboard 服務監(jiān)控臺,如果聲明了該注解,則表示使用 HstrixDasboard 服務監(jiān)控臺,否則,就不使用 HstrixDasboard 服務監(jiān)控臺。

@EnableHystrixDashboard 注解同樣是作用在類上的注解,和 @EnableHystrix 注解不同的地方在于,該注解不是使用 Hystrix 所必須聲明的注解,即在項目中你可以只使用 Hystrix 的功能特性,不使用它的 DashBoard 服務監(jiān)控臺,使用方法如下代碼所示。

@EnableHystrixDashboard
public class DemoApplication {
    // 現(xiàn)在,同學們不需要理解main方法,重點看所使用的注解即可
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

Tips:
1. Hystrix Dashboard 服務監(jiān)控臺是否需要使用,一般是跟隨項目要求來的,一般而言,任何一個項目都需要使用,因為不管是開發(fā)者,還是運維者,都需要在后臺對服務進行監(jiān)控;
2. Hystrix Dashboard 自帶了很多我們需要用到的屬性,通過查看這些屬性,我們可以很清楚地了解每一個服務的健康情況,該服務監(jiān)控臺的使用會在后期有專門小節(jié)進行介紹,希望同學們可以持續(xù)關(guān)注。

3.3 HystrixCommand 注解詳解

@HystrixCommand 注解,是 Hystrix 注解中的核心注解,可以說,只要想使用 Hystrix 的功能特性,就必須要使用該注解。

@HystrixCommand 注解提供了豐富的屬性,來讓我們配置 Hystrix 的功能特性,我將經(jīng)常用到的屬性匯總成了一個表格,如下表所示:

我們在了解了這些屬性之后,就可以使用 HystrixCommand 屬性來配置 Hystrix 的功能特性了。

屬性名稱 屬性類型 默認值 作用
fallbackMethod String 空字符串 配置服務容錯機制
defaultFallback String 空字符串 配置默認服務容錯機制
threadPoolKey String 空字符串 配置線程池隔離策略
threadPoolProperties HystrixProperty[] 空數(shù)組 配置線程池詳細策略

接下來,我們來看看這幾個屬性的詳細信息

fallbackMethod 屬性

該屬性的作用就是配置項目中,服務的容錯機制(什么是容錯機制已在前面文章中有所介紹,這里不再贅述),我們直接看用法。

這里以一個簡單的 helloWorld 請求為例,我們先來看正常請求。

@RequestMapping(value = "hello", method = RequestMethod.GET)
@ResponseBody
public String hello() {
    return "helloWorld";
}

代碼解釋:

第 1-2 行,我們使用 SpringBoot 中的注解,將請求暴露出去,即添加 helloWorld 請求的路徑。

第 3-5 行,我們編寫代碼,實現(xiàn) helloWorld 請求,其請求的響應結(jié)果是返回 helloWorld 字符串。

以上代碼中,我們沒有添加任何 Hystrix 的注解,只是一個很普通的正常請求,我們先來看下返回結(jié)結(jié)果。

請求返回結(jié)果

可以看到,請求已經(jīng)正常返回了 helloWorld 。

接下來,讓我們模擬以下請求錯誤的情況,即在請求時,我們認為設置一個延時時間,來讓 Hystrix 捕捉到這一異常,并應用 Hystrix 的容錯機制。

@RequestMapping(value = "hello", method = RequestMethod.GET)
@ResponseBody
@HystrixCommand(fallbackMethod = "helloFail")
public String hello() throws InterruptedException {
	Thread.sleep(1000);
    return "helloWorld";
}

public String helloFail(){
    return "helloFailed";
}

代碼解釋:

第 3 行,我們使用 HystrixCommand 注解的 fallbackMethod 屬性來定義當請求不能正常響應時的應急方案,fallbackMethod 屬性的值就是請求不能正常響應時,所返回的方法,這里的 helloFail 就是方法名。

第 5 行,我們手動加入了一個延時時間,該延時時間可以在響應請求時,延遲一秒響應,這就是我們手動實現(xiàn)的一個服務異常情況,該情況會被 Hystrix 的容錯機制捕捉到。

第 9-11 行,我們編寫代碼,實現(xiàn)了一個當請求 helloWorld 失敗時,所返回的應急方法,該方法返回 helloFailed 字符串。

以上代碼中,我們加入了 Hystrix 的容錯機制,讓我們來看看效果。

請求響應失敗

從上圖中我們可以看到,我們還是請求的 helloWorld 請求,但是返回的確是 helloFailed ,這就表明,我們通過 HystrixCommand 注解的 fallbackMethod 屬性來配置的服務容錯起作用了。

defaultFallback 屬性

defaultFallback 屬性和 fallbackMethod 屬性所實現(xiàn)的功能是基本相同的,只不過 defaultFallback 屬性是用來配置默認的應急方法,即當我們的項目中存在多個應急方法時,我們給其中一個請求所配置的默認應急方法。

defaultFallback 屬性所實現(xiàn)的效果和 fallbackMethod 屬性是相同的,這里不再贅述。

threadPoolKey 和 threadPoolProperties屬性

threadPoolKey 屬性是用來配置線程池隔離策略的屬性。

threadPoolProperties 屬性,則是用來配置線程池詳細策略的屬性,例如,核心線程數(shù)量、最大線程數(shù)量等。

@RequestMapping(value = "hello", method = RequestMethod.GET)
@ResponseBody
@HystrixCommand(fallbackMethod = "helloFail", threadPoolKey = "HelloHystrix")
public String hello() throws InterruptedException {
	Thread.sleep(1000);
    return "helloWorld";
}

public String helloFail(){
    return "helloFailed";
}

第 3 行,我們使用 HystrixCommand 的 threadPoolKey 屬性來配置線程池隔離,即我們將 helloWorld 請求劃到了名為 HelloHystrix 的線程池下,這樣就和主線程分離開了。

我們來看一下 threadPoolProperties 屬性的具體用法。

@RequestMapping(value = "hello", method = RequestMethod.GET)
@ResponseBody
@HystrixCommand(fallbackMethod = "helloFail",  threadPoolProperties = {
            @HystrixProperty(name = "coresize", value = "2"),
            @HystrixProperty(name = "allowMaximumSizeToDivergeFromCoreSize", value = "true"),
            @HystrixProperty(name = "maximumSize", value = "2")
})
public String hello() throws InterruptedException {
	Thread.sleep(1000);
    return "helloWorld";
}

public String helloFail(){
    return "helloFailed";
}

代碼解釋:

第 4 行,我們?yōu)?threadPoolProperties 定義了幾個常用的線程池隔離策略,它們分別是:核心線程數(shù)、開啟最大線程數(shù)、最大線程數(shù)。至于還有哪些其他的配置項,由于不再本套課程內(nèi),同學們可以自行查閱資料了解。

Tips:
1. 在實際工作中,defaultFallback 屬性相對而言很少會用到,一般會手動使用 fallbackMethod 屬性來直接指定相關(guān)請求所對應的應急方法;
2. threadPoolProperties 屬性經(jīng)常使用,這里只是將最經(jīng)常使用的幾個配置策略給同學們做了介紹,剩下不常用的希望同學們可以自行查閱了解;
3. 在使用 threadPoolProperties 屬性時,如果我們的核心線程數(shù)量和最大線程數(shù)量相等,此時又有超過該數(shù)量的請求來請求服務了,那么,在這種情況下,請一定要配置 Hystrix 的降級策略,否則,后臺服務會直接報錯。

3.4 HystrixProperty 注解詳解

@HystrixProperty 注解其實是一個輔助配置注解,他的主要作用就是對參數(shù)配置場景下,對每個配置策略進行單獨的聲明,他的用法就是上述 threadPoolProperties 屬性所配置的那樣。

@HystrixProperty 注解只有兩個屬性,分別是 name 和 value ,name 的值是 Hystrix 官網(wǎng)定義好的配置項的 key ,而 value 值則是配置對應的具體參數(shù)值。

@HystrixProperty 注解中 name 屬性的描述不能隨意描述,要根據(jù)官網(wǎng)所定義的配置項來描述,不可無中生有。

3.5 HystrixCollapser 注解詳解

@HystrixCollapser 注解在 Spring Cloud 中,發(fā)揮著重要的作用。我們可以把他簡單理解為:它是可以進行請求合并的注解,什么是請求合并呢?

正常情況下,我們的每一個請求都會請求到我們的服務中,且最后服務會返回給我們對應的響應結(jié)果,如果我們存在多個請求,且每個請求都是一樣的,在這種情況,我們的服務也是一個請求一個請求的去處理,很是浪費資源。

針對于上述這種再正常不過的情況,Hystrix 對此做了很好地優(yōu)化。當有多個相同的請求來請求我們的服務時,Hystrix 會將這些請求進行合并,并最終實現(xiàn)多個相同請求請求服務,服務只接收一次請求的目的,這就是請求合并。

請求合并相對于傳統(tǒng)請求處理而言,大大節(jié)省了服務器的資源消耗,降低了服務器的使用和維護成本。在微服務項目中,使用請求合并功能,已經(jīng)成了業(yè)界主流的方案。

接下來,先讓我們看一下,HystrixCollapser 注解中都有哪些屬性。

collapserKey 屬性,即請求合并時的 key ,字符串類型,默認是 HystrixCollapser 注解所應用的方法名。

batchMethod 屬性,需要使用請求合并功能的方法,字符串類型,值是需要使用請求合并功能的方法名。

scope 屬性,即請求合并的作用范圍,Scope 類型,默認只作用在當前請求下,可以設置成全局響應。

collapserProperties 屬性,即請求合并的詳細配置策略,HystrixProperty 數(shù)組類型,其內(nèi)容為 Hystrix 官網(wǎng)所規(guī)定內(nèi)容,使用方法同上 HystrixProperty 注解使用方法。

最后,我們使用官網(wǎng)的一個例子,來介紹一下 HystrixCollapser 注解如何使用。

@HystrixCollapser(batchMethod = "getUserByIds")
public List<User> getUserById(String id) {
    return null;
}

@HystrixCommand(fallbackMethod = "getUserByIdsFail")
public List<List<User>> getUserByIds(List<String> ids) {
List<List<User>> users = new ArrayList<User>();
    for (String id : ids) {
        users.add(new User(id, "name: " + id));
    }
    return users;
 }

代碼解釋:

第 1 行,我們使用 HystrixCollapser 注解的 batchMethod 屬性,來指定需要使用請求合并的方法。

第 6 行,我們使用 HystrixCommand 注解的 fallbackMethod 屬性,來指定 getUserByIds 方法請求失敗時所返回的應急方法。

Tips:
1. 使用 HystrixCollapser 注解時,其注解作用的方法的返回類型,必須是 list 類型,這是 Hystrix 的規(guī)定,所以,上述代碼中 getUserById 的方法的返回值是一個 User 類型的 list ;
2. 使用 HystrixCollapser 注解時,必須要搭配 HystrixCommand 注解,來配置對應請求的應急方法,這也是 Hystrix 所規(guī)定的,所以,上述代碼中我們在 getUserByIds 方法上定義了應急方法;
3. HystrixCollapser 注解在實際工作中經(jīng)常使用,是提升項目吞吐量最簡單、最直接的配置。

4. 小結(jié)

本節(jié)內(nèi)容概覽

本小節(jié)通過圖文并茂的方式,為大家介紹了 Hystrix 整合 Spring Cloud 后的基礎常用配置項,基本上,在 Spring Cloud 框架中的體現(xiàn)方式均已注解方式進行體現(xiàn)。針對在配置過程中,可能會遇到的坑,做了專門的提示;針對在實際工作中經(jīng)常使用的注解,做了重點講解和應用剖析,旨在幫助同學們能夠系統(tǒng)性的應用這些基礎注解,打好 Hystrix 的配置基礎。