使用Spring Cloud和Netflix Hystrix的客戶端彈性模式(學習筆記)

項目代碼:使用Spring Cloud和Netflix Hystrix的客戶端彈性模式
同樣首先記得將Sql服務,Eureka,配置服務開啓,然後再開啓許可證服務。
小筆記:Spring cloud config的默認端口是8888,所以下面的配置是暫時禁用服務發現。然後直接從默認端口去找配置服務,從運行日誌上也能直接看出來。
在這裏插入圖片描述
在這裏插入圖片描述

一、搭建許可證服務以使用Spring Cloud和Hystrix

添加依賴:
在這裏插入圖片描述
添加註解以使用Hystrix:
在這裏插入圖片描述

二、使用Hystrix實現斷路器

1.數據庫調用增加斷路器

在這裏插入圖片描述
運行許可證服務,然後用postman試着去調一下服務:

http://localhost:8080/v1/organizations/e254f8c-c442-4ebe-a82a-e2fc1d1ff78a/licenses/

調用時有時就會成功,有時就會失敗:
在這裏插入圖片描述
在這裏插入圖片描述

2.對組織微服務的調用增加超時

和數據庫用法是一樣的。
在這裏插入圖片描述
小筆記:這裏HystrixCommand沒有加任何參數配置,默認的會將所有遠程調用服務都放在同一線程池下,這可能會導致應用程序中出現問題,後面說艙壁的時候再去討論它,現在先不管。

3.定製斷路器的超時時間

增肌一條註解參數即可,這裏配成12s。

@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds", value="12000")

在這裏插入圖片描述

三、後備處理

在這裏插入圖片描述
用Postman驗證:
在這裏插入圖片描述

四、實現艙壁模式。

小筆記:默認情況下,Hystrix的線程池有10個線程。
在這裏插入圖片描述
小筆記:maxQueueSize設爲-1,則將使用SynchronousQueue來保存所有傳入的請求,大於0的話用LinkedBlockingQueue。
設爲0的話可以用queueSizeRejectionThreshold屬性來動態更改隊列的大小。

五、微調Hystrix

短路的算法是,在一個時間窗口裏(默認10s),先看調用次數,次數少的話,就不考慮斷路。
次數多了,就查看失敗的百分比,達到閾值,就斷路。
短路之後,在一個時間窗口裏(5s),嘗試重新調用(發一個調用),成功了就讓它接上,不成功就再開一個時間窗口。
配置如下:
在這裏插入圖片描述
這裏桶的用處,是底層實現的具體細節,這裏後面我需要補一下其算法知識。

六、線程上下文和Hystrix

小筆記:Hystrix的艙壁默認是用線程池來隔離的,還可以調成信號量。一般還是建議用線程池。

1.ThreadLocal與Hystrix。

默認情況下,Hystrix不會將父線程的上下文環境傳遞到Hystrix命令管理的線程中去。(線程池管理,TRREAD隔離級別)。也就是說在父線程中設爲爲ThreadLocal的值在子線程都是不可用的。
驗證:
在做驗證之前,我們要把這裏的Configuration給註釋掉,因爲這是下面一個小節需要討論的知識。
在這裏插入圖片描述
用攔截器找到REST請求的ID,全局跟蹤。
在這裏插入圖片描述
注意攔截器裏有打的第一個日誌。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
結果顯然符合預期。

2.HystrixConcurrencyStrategy實戰

Hystrix允許開發人員自定義併發策略,它將包裝Hystrix調用,並允許開發人員將附加的父線程上下文注入由Hystrix管理的線程中。有三步操作。

  1. 定義自定義的Hystrix併發策略類。
  2. 定義一個Callable類,將UserContext注入到Hystrix命令中。
  3. 配置Spring Cloud以使用自定義Hystrix併發策略。

2.1自定義Hystrix併發策略類

小筆記:Hystrix只需要定義一個策略,但是允許將多個策略插入到一個“策略組”中。
在這裏插入圖片描述
小筆記:爲了健壯性,要嗎調用已存在,要嗎調基類這種做法是必要的,否則可能會出現問題。

2.2定義Callabe類。

在這裏插入圖片描述
在這裏插入圖片描述
然後再運行一下,就發現:
在這裏插入圖片描述
與預期相符。

七、Docker運行

這個就不多說了,參考第三章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章