dubbo自定義異常處理

2021-09-09 08:45:19 字數 872 閱讀 1715

1.問題

專案中部分模組單獨部署,模組間服務呼叫使用dubbo,當服務提供者丟擲了自定義的異常時,服務消費者捕獲的是乙個runtimeexception而不是自定義的異常,導致獲取自定義異常的message時,得到的不僅僅是丟擲的message,而是乙個異常棧。

2.原因

dubbo服務提供者丟擲的異常會被 com.alibaba.dubbo.rpc.filter.exceptionfilter攔截處理,若是自定義的異常,會被包裝成runtimeexception拋給服務消費者。

exceptionfilter處理邏輯:

(1)服務提供者實現了genericservice介面,直接丟擲;

(2)如果是checked異常,直接丟擲;

(3)在方法簽名上有宣告,直接丟擲;

(4)異常類和介面類在同一jar包裡,直接丟擲;

(5)是jdk自帶的異常,直接丟擲;

(6)是dubbo本身的異常,直接丟擲;

(7)否則,包裝成runtimeexception拋給客戶端。

具體參見「非常詳細。

3.解決方式(針對exceptionfilter的處理機制,使其滿足丟擲條件)

(1)服務提供者實現genericservice介面;

(2)使用checked異常;

(3)服務提供者的api方法上直接throws自定義異常;

(4)自定義異常類放在服務提供者的jar包裡;

(5)實現dubbo的filter,自定義provider的異常處理邏輯;

(6)網上還看見直接修改dubbo的exceptionfilter原始碼,將自定義異常加入丟擲支援後重新打成jar包。

異常處理 自定義異常

異常 1.定義 執行時檢測到的錯誤。2.現象 當異常發生時,程式不會再向下執行,而轉到函式的呼叫語句。3.常見異常型別 名稱異常 nameerror 變數未定義。型別異常 typeerror 不同型別資料進行運算。索引異常 indexerror 超出索引範圍。屬性異常 attributeerror ...

自定義異常處理

自定義異常處理類 using system using system.diagnostics 日誌記錄類 using system using system.configuration using system.diagnostics using system.io using system.tex...

自定義異常處理

煙台大學計算機學院學生 all right reserved.檔名稱 c 完成日期 2014年10月16日 版本號 v1.0 對任務及求解方法的描述部分 輸入兩個數,輸出其相除的結果,並進行增加乙個自定義異常類outofboundexception,我的程式 using system using s...