Springcloud知識點筆記

Hytrix

爲什麼需要hytrix?

因爲雪崩效應。借用一張圖

異常情況:

首先E先down掉,這個時候會觸發CD的超時和重試,反覆的請求會慢慢耗盡CD的內存和CPU資源,然後CD也掛掉。

然後AB同理,整個服務GG。

 

解決方案:

線程隔離和服務降級

線程隔離指的是tomcat給每個服務分配指定的線程池,如果線程池已滿則將被立即拒絕,默認不採用排隊,加速失敗判定時間。

如果線程池已滿或者請求超時,則會進行降級服務。

服務降級指的是關掉或者簡單處理空閒無用的服務,爲核心服務提供資源。

實踐中注意,降級處理一般在服務的消費方做。

降級最簡單的demo實現:

1.添加依賴

spring-cloud-starter-netflix-hystrix

2.配置報錯時長等信息,一般默認好

3.添加@EnableCircuitBreaker註解,這裏一般可以和@EnableDiscoveryClient和@SpringbootApplication三合一使用@SpringCloudApplication

4.指定控制器上添加HytrixCommand註解@HystrixCommand(fallbackMethod = "queryByIdFallBack"),寫上對應方法的降級方法即可。注意這裏降級方法的返回值要和對應方法的返回值類型相等。

5.但是不能保證所有的方法都配置HystrixCommand,所以可以在此類頭部加上@DefaultProperties(defaultFallback="xxx")。當然根據每個方法需要觸發的等待時長不一樣,可以在Command中加入屬性。對應類裏有變量可以查看。

熔斷機制:

 

這張圖完美詮釋。

 

 

Feign:

作用:把rest請求隱藏,僞裝成類似Springmvc的Controller一樣,不用自己拼接url再用restTemplate調用。說人話就是簡化遠程調用。

簡單demo搭建:

1.導入依賴:spring-cloud-starter-openfeign

2.主程序註解:@EnableFeignClients

3.創建接口

比如之前原始的方法是這樣拼接url的

現在只需要在接口中

這樣實現即可。

簡單的調用。

但是Feign裏面觸發熔斷要稍微麻煩點,需要在對應的實現類中實現一個fallback函數。這裏太懶了,mark一下。

 

 

Zuul:

Zuul本意是一個怪獸的名字,在springcloud裏的作用如下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發佈了23 篇原創文章 · 獲贊 17 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章