Hystrix在項目中的使用(二)-基于AOP實現(xiàn)命令式編程(動態(tài)配置)

  1. 之前Hystrix在項目中的使用(一)中我介紹過在項目中使用Hystrix注解的方式對服務(wù)進(jìn)行隔離和降級注解方式雖然簡單怎茫,方便易與使用伤柄,但是他主要的問題是Hystrix參數(shù)通過注解參數(shù)進(jìn)行設(shè)置冲茸,無法做到動態(tài)修改蚕键。 如果我們想對Hystrix進(jìn)行動態(tài)配置娃殖,則只能使用期命令式編程方法,但如果使用命令方式對原業(yè)務(wù)接口進(jìn)行改造西篓,這個成本也有點大愈腾,所以想到使用AOP的方式,通過對目標(biāo)方式進(jìn)行攔截岂津,再在攔截面上進(jìn)行Hystrix操作顶滩,這樣就無需對原有的業(yè)務(wù)代碼進(jìn)行修改

  2. 命令式編程

    • 繼承HystrixCommand
繼承HystrixCommand

繼承HystrixCommand,重載其getFallback()和run()方法

通過線程運行helloWorldCommand
測試方法

這里需要注意的是每個Command對象只能調(diào)用一次,不可以重復(fù)調(diào)用寸爆,重復(fù)調(diào)用對應(yīng)異常信息:This instance can only be executed once. Please instantiate a new instance礁鲁。從截圖中我們可以看出我們執(zhí)行的是helloWorldCommand的execute方法,這個方法是同步的赁豆,其效果等同于helloWorldCommand.queue().get()仅醇。

我們在run()方法中sleep3秒,Hystrix配置的參數(shù)為5秒魔种,也就是說業(yè)務(wù)應(yīng)該正常處理析二。


正常返回了run的結(jié)果

因此,我們就可以將業(yè)務(wù)代碼寫在繼承了HystrixCommand的run()方法中节预。

我們將Hystrix的配置參數(shù)修改為2秒叶摄,重新運行

觸發(fā)getFallback方法

從結(jié)果可以看出,因為run方法處理時間大于hystrix的超時時間安拟,觸發(fā)了getFallback方法蛤吓,所以我們可以在getFallback方法中來處理我們的服務(wù)降級邏輯。

在上面我們說過 helloWorldCommand.execute()是一個同步的調(diào)用糠赦,我們也可以修改這異步的調(diào)用

異步調(diào)用
此時result還是默認(rèn)值
  1. 在項目中通過AOP使用Hystrix
    通過命令式編程我們可以將業(yè)務(wù)方法寫在HystrixCommand的run方法中会傲,但這樣對原有業(yè)務(wù)代碼的改動太大。然后通過注解的方式拙泽,雖然對業(yè)務(wù)代碼的改動較小淌山,但是我們沒法動態(tài)的修改注冊的配置參數(shù),不夠靈活顾瞻。所以通過AOP與Hystrix相結(jié)合泼疑,對原有的業(yè)務(wù)方法進(jìn)行攔截,為其原有方法增加Hystrix的實現(xiàn)荷荤。
    • 增加AOP切面


      Advice
    • Controller


      Controller
    • Service


      Service

我們在HystrixCommandAdvice中設(shè)置的withExecutionTimeoutInMilliseconds超時時間為8秒 模擬Http運行的時候為10秒 運行結(jié)果如下:

超時返回結(jié)果

修改HystrixCommandAdvice中設(shè)置的withExecutionTimeoutInMilliseconds超時時間為12秒 運行結(jié)果如下:

正常返回結(jié)果
  1. 動態(tài)修改Hystrix參數(shù)
    其實說到這里已經(jīng)很明顯了退渗,只需要在HystrixCommandAdvice中來實時獲取需要的配置參數(shù)值就可以,如從配置文件梅猿,Redis氓辣,數(shù)據(jù)庫中獲取。然后將其傳到setter方法中即可袱蚓,這里我要提一下Netflix的Archaius钞啸,Archaius用于動態(tài)的管理屬性配置文件。

    • 引用Archaius
  <dependency>
  <groupId>com.netflix.archaius</groupId>
  <artifactId>archaius-core</artifactId>
  <version>0.6.0</version>
 </dependency>

Archaius默認(rèn)會自動讀取項目類路徑下的config.properties文件喇潘。

配置config.properties

在HystrixCommandAdvice中調(diào)用Archaius

獲取參數(shù)
獲取配置文件中的值

我們可以看出控制臺打印出來的是8000体斩,正是我們在config.properties中配置的值。
我們現(xiàn)在修改這個文件的值將其修改為12000

更改的的值

可以看到我們這里獲取到的值是12000颖低,我們的服務(wù)并沒有重啟絮吵,也就是這樣也進(jìn)行了動態(tài)配置,這里要注意的是我們修改的是類路徑classes下的config.properties忱屑。
默認(rèn)的:Archaius會每分鐘去重新加載下屬性配置蹬敲。

到此暇昂,我們就可以在項目中使用hystrix對服務(wù)進(jìn)行降級,熔斷并通過監(jiān)控數(shù)據(jù)進(jìn)行動態(tài)調(diào)整參數(shù)伴嗡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末急波,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瘪校,更是在濱河造成了極大的恐慌澄暮,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阱扬,死亡現(xiàn)場離奇詭異泣懊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)麻惶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門馍刮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人用踩,你說我怎么就攤上這事渠退。” “怎么了脐彩?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵碎乃,是天一觀的道長。 經(jīng)常有香客問我惠奸,道長梅誓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任佛南,我火速辦了婚禮梗掰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗅回。我一直安慰自己及穗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布绵载。 她就那樣靜靜地躺著埂陆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娃豹。 梳的紋絲不亂的頭發(fā)上焚虱,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音懂版,去河邊找鬼鹃栽。 笑死,一個胖子當(dāng)著我的面吹牛躯畴,可吹牛的內(nèi)容都是我干的民鼓。 我是一名探鬼主播薇芝,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丰嘉!你這毒婦竟也來了恩掷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤供嚎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后峭状,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體克滴,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年优床,在試婚紗的時候發(fā)現(xiàn)自己被綠了劝赔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡胆敞,死狀恐怖着帽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情移层,我是刑警寧澤仍翰,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站观话,受9級特大地震影響予借,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜频蛔,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一灵迫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晦溪,春花似錦瀑粥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嫌术,卻和暖如春哀澈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背度气。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工割按, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磷籍。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓适荣,卻偏偏與公主長得像现柠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子弛矛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理够吩,服務(wù)發(fā)現(xiàn),斷路器丈氓,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評論 25 707
  • 一周循、前言 現(xiàn)在分布式系統(tǒng)的規(guī)模不斷增加,對可用性的要求也越來越高万俗。在各種高可用設(shè)計模式中湾笛,熔斷、隔離闰歪、降級是經(jīng)常被...
    編走編想閱讀 2,860評論 0 7
  • 十年之后誰會記得最難的習(xí)題嚎研?卻難以忘畢業(yè)那天滿滿的回憶。 感覺自己就像明星不停的簽名 库倘。临扮。。 校草在嘆氣教翩,女神在哭...
    蒼夜琉璃夏閱讀 198評論 2 1
  • 小雨淋杆勇,大雨淋,煙雨江南木傘臨迂曲。長街水幕深靶橱。柏森森,夏森森路捧,落日無蹤騷客吟关霸。總關(guān)一念心杰扫。
    浮零先生閱讀 218評論 2 4