今天是劉小愛自學(xué)Java的第135天。 感謝你的觀看,謝謝你。 學(xué)習(xí)內(nèi)容安排如下: 昨天學(xué)了下springcloud的兩個組件,今天繼續(xù)學(xué)習(xí)剩下的3個組件。 當(dāng)然還有其它的組件,這里就不詳細學(xué)習(xí)了,暫且只學(xué)和項目中相關(guān)的即可。 注意,做一個說明: 這幾天因為自身原因,導(dǎo)致學(xué)習(xí)狀態(tài)出了點問題,故文章質(zhì)量很差,后續(xù)會加緊調(diào)整狀態(tài)。 一、Zuul網(wǎng)關(guān)Zuul:維基百科中,它是電影《捉鬼敢死隊》里的怪獸,在紐約引發(fā)了巨大騷亂。 所以在微服務(wù)中,Zuul就是守門的大Boss,其核心功能是:過濾和路由。 它是一個獨立的服務(wù),我們一步步編寫。 1Zuul-Service ①依賴導(dǎo)入 zuul對應(yīng)的就是網(wǎng)關(guān)的依賴。 既然網(wǎng)關(guān)是一個服務(wù),那么它也要去eureka注冊,所以還需要eureka客戶端的依賴。 上圖中因為截圖原因,我并沒有截全。 ②啟動類上開啟Zuul 在啟動類上,通過@EnableZuulProxy開啟網(wǎng)關(guān)功能,也就意味著該應(yīng)用就是網(wǎng)關(guān)了。 看到Enable這個單詞,本身就是開啟的意思,也就可以想到是開啟了某個功能。 2網(wǎng)關(guān)的配置文件 ①網(wǎng)關(guān)的端口 這不用多說,每個服務(wù)都要配置。 ②網(wǎng)關(guān)的服務(wù)名稱 取名為api-gateway,在注冊中心顯示的也就是該名稱,gateway本身也是網(wǎng)關(guān)的意思, ③網(wǎng)關(guān)的路由配置 該配置可以省略不寫,會自動將映射路徑和服務(wù)id匹配起來,當(dāng)然我們要知道它是怎么回事,畫圖對比說明: 前者是通過網(wǎng)關(guān)訪問服務(wù),后者是通過服務(wù)直接訪問,該配置就能達到這樣的效果。 再次強調(diào):該配置可以不寫,會自動匹配。 ④配置網(wǎng)關(guān)對應(yīng)的注冊中心 每個服務(wù)都需要去eureka注冊中心注冊。 3過濾器 網(wǎng)關(guān)是如何保護其它服務(wù)的?過濾器。 ①filterType(方法 返回值為字符串,代表過濾器的類型:
②filterOrder()方法 通過返回的int值來定義過濾器的執(zhí)行順序,數(shù)字越小優(yōu)先級越高。 ③shouldFilter()方法 返回一個Boolean值,判斷該過濾器是否需要執(zhí)行:返回true執(zhí)行,返回false不執(zhí)行。 ④run()方法 過濾器的具體邏輯,我們可以自定義一個過濾器的,以后遇到具體業(yè)務(wù)會詳細說明。 二、FeignFeign,也就是偽裝的意思,為什么叫偽裝? 就是使用它后,就好像是在自己在處理具體的業(yè)務(wù)邏輯了,實際上是在調(diào)用別的服務(wù)。 不用我們自己拼接url,拼接參數(shù)等等操作,一切都交給Feign去做。 具體我們用一個例子來說明: ①引入feign依賴 openfeign即開啟feign的意思。 ②啟用feign客戶端 通過@EnableFeignClients注解開啟feign客戶端,開啟之后就可以直接使用了。 注意:feign是使用在某個服務(wù)消費方中的,它并不是一個新的服務(wù)。 ③編寫一個feign客戶端
④Controller層使用feign實現(xiàn)調(diào)用 直接使用userClient調(diào)用feign客戶端里的方法,就只需要說明一個id就好了。 我們現(xiàn)在再看Controller層,很難直接看出它是在調(diào)用別的服務(wù),而是自己在處理業(yè)務(wù),這也是它的名稱“偽裝”的由來。 以前我們都是在Controller層中使用url的,一眼就能看出是在遠程調(diào)用。 三、HystrixHystix是豪豬的意思,豪豬全身是刺,看起來就不好惹,所以Hystix是一種保護機制。 那么Hystix的作用是什么呢?具體要保護什么呢?想明白這些問題,得知道雪崩問題。 1雪崩問題 微服務(wù)中,服務(wù)間調(diào)用關(guān)系錯綜復(fù)雜,一個請求,可能需要調(diào)用多個微服務(wù)接口才能實現(xiàn),會形成非常復(fù)雜的調(diào)用鏈路: 如上圖所示,當(dāng)然我這算是非常簡單了,實際上會復(fù)雜很多。 一次業(yè)務(wù)請求,需要調(diào)用很多個服務(wù),此時服務(wù)B出現(xiàn)異常了,請求阻塞。 用戶不會得到響應(yīng),那么線程一不會釋放,后續(xù)越來越多的用戶請求到來,越來越多的線程會阻塞。 服務(wù)器支持的線程和并發(fā)數(shù)有限,請求一直阻塞,會導(dǎo)致服務(wù)器資源耗盡,從而導(dǎo)致所有其它服務(wù)都不可用,形成雪崩效應(yīng)。 Hystix解決雪崩問題的手段主要是服務(wù)降級,包括:線程隔離,服務(wù)熔斷。 2注解@SpringCloudApplication 使用該注解后,就相當(dāng)于使用了:
關(guān)于線程熔斷問題,Hystrix這個技術(shù)已經(jīng)很久沒有維護了,現(xiàn)在主流最新的應(yīng)用是使用SpringCloud阿里巴巴相關(guān)組件。 但是我這邊的教程用的就是這些,我不能說和教程對著來,要學(xué)新的組件只能以后再說了。 最后謝謝你的觀看。 如果可以的話,麻煩幫忙點個贊,謝謝你。 |
|