日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hystrix降级逻辑中如何获取触发的异常

發布時間:2024/7/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hystrix降级逻辑中如何获取触发的异常 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

注解方式

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

@HystrixCommand(fallbackMethod = "fallback")
User getUserById(String id) {
throw new RuntimeException("getUserById command failed");
}

User fallback(String id, Throwable throwable) {
return new User("def", "def");
}

這里定義了一個主邏輯函數getUserById,主邏輯中會主動拋出一個異常,從而觸發該主邏輯的降級函數fallback。重點看fallback函數中的最后一個傳參Throwable throwable。通過這樣的簡單定義,開發人員就可以很方便的獲取觸發降級邏輯的異常信息,用作日志記錄或者其它復雜的業務邏輯了。

繼承方式

在繼承方式中要獲取觸發異常也非常簡單,具體如下:

public static class UserCommand extends HystrixCommand<User> {

protected UserCommand() {
super(HystrixCommandGroupKey.Factory.asKey("UserCommand"));
}

@Override
protected User run() throws Exception {
throw new RuntimeException("getUserById command failed");
}

@Override
protected User getFallback() {
System.out.println(getFailedExecutionException().getMessage());
return new User("def", "def");
}

}

上面的實現同上一節注解方式的實現一樣,在使用繼承方式的時候通過getFailedExecutionException方法就可以獲取到觸發降級的異常信息了。

總結

我們在實際使用Hystrix的時候,有時候一些業務異常或者內部RPC由服務提供方拋出的異常在消費方沒能考慮周到,會觸發一些意料之外的降級。所以在降級邏輯中,建議每一段都加入觸發異常的日志記錄,以方便定位問題原因。

以下專題教程也許您會有興趣

  • Spring Boot基礎教程
  • Spring Cloud基礎教程

總結

以上是生活随笔為你收集整理的Hystrix降级逻辑中如何获取触发的异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。