自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hystrix降級(jí)邏輯中如何獲取觸發(fā)的異常

開(kāi)發(fā) 開(kāi)發(fā)工具
為了更精準(zhǔn)的定位觸發(fā)原因,或是在降級(jí)邏輯中需要根據(jù)不同的異常做不同的處理時(shí),在降級(jí)方法中,我們希望可以獲取到主邏輯中拋出的異常信息。接下來(lái)就來(lái)介紹一下Hystrix兩種不同實(shí)現(xiàn)方式中如何在降級(jí)邏輯中獲取異常信息的方法。

通過(guò)之前Spring Cloud系列教程中的《Spring Cloud構(gòu)建微服務(wù)架構(gòu):服務(wù)容錯(cuò)保護(hù)(Hystrix服務(wù)降級(jí))》一文,我們已經(jīng)知道如何通過(guò)Hystrix來(lái)保護(hù)自己的服務(wù)不被外部依賴方拖垮的情況。但是實(shí)際使用過(guò)程中經(jīng)常碰到開(kāi)發(fā)反應(yīng)“莫名”觸發(fā)了降級(jí)邏輯的情況。為了更精準(zhǔn)的定位觸發(fā)原因,或是在降級(jí)邏輯中需要根據(jù)不同的異常做不同的處理時(shí),在降級(jí)方法中,我們希望可以獲取到主邏輯中拋出的異常信息。接下來(lái)就來(lái)介紹一下Hystrix兩種不同實(shí)現(xiàn)方式中如何在降級(jí)邏輯中獲取異常信息的方法。

[[236808]]

注解方式

先介紹一下用注解方式定義的Hystrix命令是如何在降級(jí)邏輯中獲取異常的,實(shí)現(xiàn)非常簡(jiǎn)單,先看下面的例子:

  1. @HystrixCommand(fallbackMethod = "fallback"
  2. User getUserById(String id) { 
  3.     throw new RuntimeException("getUserById command failed"); 
  4.  
  5. User fallback(String id, Throwable throwable) { 
  6.     return new User("def""def"); 

這里定義了一個(gè)主邏輯函數(shù)getUserById,主邏輯中會(huì)主動(dòng)拋出一個(gè)異常,從而觸發(fā)該主邏輯的降級(jí)函數(shù)fallback。重點(diǎn)看fallback函數(shù)中的***一個(gè)傳參Throwable throwable。通過(guò)這樣的簡(jiǎn)單定義,開(kāi)發(fā)人員就可以很方便的獲取觸發(fā)降級(jí)邏輯的異常信息,用作日志記錄或者其它復(fù)雜的業(yè)務(wù)邏輯了。

繼承方式

在繼承方式中要獲取觸發(fā)異常也非常簡(jiǎn)單,具體如下:

  1. public static class UserCommand extends HystrixCommand<User> { 
  2.  
  3.     protected UserCommand() { 
  4.         super(HystrixCommandGroupKey.Factory.asKey("UserCommand")); 
  5.     } 
  6.  
  7.     @Override 
  8.     protected User run() throws Exception { 
  9.         throw new RuntimeException("getUserById command failed"); 
  10.     } 
  11.  
  12.     @Override 
  13.     protected User getFallback() { 
  14.         System.out.println(getFailedExecutionException().getMessage()); 
  15.         return new User("def""def"); 
  16.     } 
  17.  

上面的實(shí)現(xiàn)同上一節(jié)注解方式的實(shí)現(xiàn)一樣,在使用繼承方式的時(shí)候通過(guò)getFailedExecutionException方法就可以獲取到觸發(fā)降級(jí)的異常信息了。

總結(jié)

我們?cè)趯?shí)際使用Hystrix的時(shí)候,有時(shí)候一些業(yè)務(wù)異?;蛘邇?nèi)部RPC由服務(wù)提供方拋出的異常在消費(fèi)方?jīng)]能考慮周到,會(huì)觸發(fā)一些意料之外的降級(jí)。所以在降級(jí)邏輯中,建議每一段都加入觸發(fā)異常的日志記錄,以方便定位問(wèn)題原因。

【本文為51CTO專欄作者“翟永超”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)51CTO聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專欄
相關(guān)推薦

2017-07-03 09:50:07

Spring Clou微服務(wù)架構(gòu)

2023-01-02 11:34:04

LinuxFlatpak軟件包

2018-06-11 08:50:46

LinuxArch Linux降級(jí)軟件包

2025-03-13 00:55:00

微服務(wù)架構(gòu)系統(tǒng)

2023-03-09 12:21:38

2021-09-28 09:16:43

SQLancerDBMS邏輯漏洞

2009-03-18 08:59:28

throw異常Java

2019-03-08 11:00:32

BashLinux

2015-07-30 10:12:32

JavaNullAssert

2025-02-05 10:02:03

Locust測(cè)試異常處理

2023-05-30 07:56:23

代碼軟件開(kāi)發(fā)

2019-07-25 12:37:08

程序員技能開(kāi)發(fā)者

2024-03-14 08:13:08

BFCWeb機(jī)制

2021-06-05 05:11:52

代碼狀態(tài)機(jī)邏輯

2017-12-01 08:54:18

SpringCloudHystrix

2021-10-06 19:01:45

高并發(fā)熔斷預(yù)熱

2012-07-26 10:29:55

Linux操作系統(tǒng)

2022-07-21 09:31:58

Actuator密碼框架

2024-07-02 10:58:53

2017-06-21 12:22:33

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)