Hystrix 服務(wù)容錯(cuò)與服務(wù)降級(jí)概念講解與實(shí)操
1. 前言
在之前的幾篇小節(jié)中,我們對(duì) Hystrix 的集成和常用的配置項(xiàng)做了詳細(xì)的講解,這些內(nèi)容是學(xué)習(xí) Hystrix 基礎(chǔ)中的基礎(chǔ),在介紹完這些基礎(chǔ)內(nèi)容之后,接著我們需要來(lái)對(duì) Hystrix 所提供的各種特性進(jìn)行介紹,這也是為什么在 Spring Cloud 微服務(wù)框架中使用 Hystrix 的原因。
本節(jié)會(huì)對(duì) Hystrix 中首當(dāng)其沖的特性 - 服務(wù)容錯(cuò)與服務(wù)降級(jí),進(jìn)行詳細(xì)的介紹,包括基本概念的解釋以及在 Spring Cloud 中實(shí)現(xiàn)服務(wù)容錯(cuò)與服務(wù)降級(jí)。
本節(jié)主要內(nèi)容:
-
Hystrix 服務(wù)容錯(cuò)與服務(wù)降級(jí)概念剖析;
-
Hystrix 服務(wù)容錯(cuò)與降級(jí)實(shí)操。
2. Hystrix 服務(wù)容錯(cuò)與服務(wù)降級(jí)概念剖析
在介紹 Hystrix 服務(wù)容錯(cuò)與服務(wù)降級(jí)概念之前,我們先拋開(kāi) Hystrix 來(lái)了解一下傳統(tǒng)意義上所說(shuō)的容錯(cuò)指的是什么意思。
針對(duì)容錯(cuò)這一名詞,對(duì)不同的行業(yè)領(lǐng)域有不同的意思,針對(duì)于計(jì)算機(jī)科學(xué)與技術(shù)等計(jì)算機(jī)相關(guān)專業(yè)而言,容錯(cuò)指的是:當(dāng)系統(tǒng)在運(yùn)行時(shí),有錯(cuò)誤被激活的情況下,仍能保證不間斷提供服務(wù)的方法和技術(shù)。 通過(guò)這段話可以看出,對(duì)計(jì)算機(jī)相關(guān)專業(yè)而言,容錯(cuò)指的是一種方法或技術(shù)。
Tips: 這里強(qiáng)調(diào)一點(diǎn),容錯(cuò)指的是一種方法或技術(shù),而不是指一個(gè)方法或技術(shù),具體含義我們繼續(xù)往下看。
在明白了什么是傳統(tǒng)意義上的容錯(cuò)之后,我們回到 Hystrix 中,對(duì)于服務(wù)容錯(cuò)而言,我們可以這樣定義,即:在我們的系統(tǒng)正常運(yùn)行時(shí),當(dāng)系統(tǒng)中出現(xiàn)了可以直接影響系統(tǒng)正常運(yùn)行的錯(cuò)誤時(shí),仍能夠保證服務(wù)不間斷的正常運(yùn)行的一種技術(shù),我們把這種技術(shù)稱為服務(wù)容錯(cuò)。
我們都知道,服務(wù)容錯(cuò)是 Hystrix 主要提供的特性,那么,如果我們想實(shí)現(xiàn)這一特性,我們需要通過(guò)什么方法來(lái)實(shí)現(xiàn)呢,或者說(shuō)通過(guò)采用哪種方法可以實(shí)現(xiàn)服務(wù)容錯(cuò)呢?
在 Hystrix 中,我們需要通過(guò) Hystrix 提供的服務(wù)降級(jí)策略來(lái)實(shí)現(xiàn)服務(wù)容錯(cuò),這是 Hystrix 默認(rèn)提供的實(shí)現(xiàn)方法,同時(shí)也只有通過(guò)這種方法可以來(lái)實(shí)現(xiàn) Hystrix 的服務(wù)容錯(cuò)機(jī)制。
在理解了什么是服務(wù)容錯(cuò)之后,接著我們來(lái)看一下什么是服務(wù)降級(jí)。
Tips:
1. 在微服務(wù)中,服務(wù)容錯(cuò)指的就是當(dāng)一個(gè)服務(wù)發(fā)生故障時(shí),通過(guò)一定的手段或者技術(shù),來(lái)保證該故障不會(huì)影響系統(tǒng)正常的運(yùn)行。而這種技術(shù),在 Hystrix 中指的就是服務(wù)降級(jí),即通過(guò)服務(wù)降級(jí)來(lái)實(shí)現(xiàn)服務(wù)容錯(cuò)。
2. 我們可以這樣理解,服務(wù)容錯(cuò)是一種技術(shù)實(shí)現(xiàn)目標(biāo),而服務(wù)降級(jí)則是實(shí)現(xiàn)服務(wù)容錯(cuò)的一種方法或技術(shù)手段。
在 Hystrix 中,從某種意義上講,服務(wù)降級(jí)其實(shí)就是服務(wù)容錯(cuò),只不過(guò)換了一種叫法而已,其本質(zhì)是一成不變的,我們理解了什么是服務(wù)容錯(cuò),也就理解了什么是服務(wù)降級(jí)了。
從上述內(nèi)容中,我們可以知道,服務(wù)降級(jí)是實(shí)現(xiàn)服務(wù)容錯(cuò)的一種方法或技術(shù)手段,那么,在 Hystrix 中實(shí)現(xiàn)服務(wù)容錯(cuò)都有哪些方法或技術(shù)手段呢,接下來(lái)讓我們結(jié)合具體的代碼實(shí)操一起來(lái)看一下。
3. Hystrix 服務(wù)容錯(cuò)與降級(jí)實(shí)操
3.1 通過(guò)配置 Hystrix 注解實(shí)現(xiàn)
要想在我們的項(xiàng)目中使用 Hystrix 所提供的服務(wù)容錯(cuò)與服務(wù)降級(jí)特性,需要我們首先在我們的項(xiàng)目中啟用 Hystrix 功能,具體代碼如下:
@SpringBootApplication
@EnableHystrix
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
代碼解釋:
第 2 行,我們?cè)陧?xiàng)目的啟動(dòng)類的上方,添加了 EnableHystrix 注解,表示我們的項(xiàng)目需要使用 Hystrix 功能服務(wù)。
在將 Hystrix 功能服務(wù)啟用之后,我們需要在應(yīng)用服務(wù)容錯(cuò)與服務(wù)降級(jí)的具體類中,去聲明相應(yīng)的注解,具體代碼如下:
@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 行,我們?cè)诰唧w方法的上方,添加了 HystrixCommand 注解,表示該方法應(yīng)用了 Hystrix 的配置參數(shù),接著,我們?cè)谠撟⒔庵?,引入?fallbackMethod 屬性,其值是用來(lái)指定當(dāng) hello 方法不能正確響應(yīng)時(shí)所返回的錯(cuò)誤處理方法,這里指向了 helloFail 方法。
Tips:
1. 當(dāng)我們配置完 HystrixCommand 注解的 fallbackMethod 屬性之后,就表明我們已經(jīng)成功配置好了 Hystrix 中的服務(wù)容錯(cuò)與服務(wù)降級(jí)特性,就可以正常往下開(kāi)展我們的業(yè)務(wù)開(kāi)發(fā)工作了;
2. fallbackMethod 屬性就是用來(lái)配置 Hystrix 服務(wù)容錯(cuò)與服務(wù)降級(jí)的屬性,它沒(méi)有其他額外的用途,在實(shí)際工作中,我們經(jīng)常會(huì)用到該屬性。
3.2 通過(guò)引入 Open Feign ,配合 Hystrix 實(shí)現(xiàn)
此種實(shí)現(xiàn)方式,需要在項(xiàng)目中引入 Open Feign 遠(yuǎn)程服務(wù)調(diào)用中間件,并且要將該中間件集成到 Hystrix 中才能實(shí)現(xiàn)服務(wù)容錯(cuò)與降級(jí),由于我們的課程是針對(duì)與 Hystrix 的,所以,在這里我只是簡(jiǎn)單提出一下,讓各位同學(xué)知道,還有一種這樣的實(shí)現(xiàn)方案,后續(xù)我們?cè)诮榻B Open Feign 再做詳細(xì)的介紹。
4. 視頻演示
5. 小結(jié)

本小節(jié)為大家介紹了什么是服務(wù)容錯(cuò)、什么是服務(wù)降級(jí),以及對(duì)服務(wù)容錯(cuò)和服務(wù)降級(jí)的代碼實(shí)操,希望各位同學(xué)通過(guò)學(xué)習(xí)本節(jié)的內(nèi)容,可以對(duì)服務(wù)容錯(cuò)與服務(wù)降級(jí)有自己的理解和看法,這樣,在實(shí)際的工作中,我們?cè)诠芾砦⒎?wù)項(xiàng)目時(shí),才能得心應(yīng)手,在遇到問(wèn)題時(shí),才能從容應(yīng)對(duì)。