dubbo全域性異常處理 dubbo異常處理

2021-10-18 05:46:08 字數 961 閱讀 7309

dubbo異常處理

我們的專案使用了dubbo進行不同系統之間的呼叫。

每個專案都有乙個全域性的異常處理,對於業務異常,我們會拋出自定義的業務異常(繼承runtimeexception)。

全域性的異常處理會根據不同的異常型別進行不同的處理。

最近我們發現,某個系統呼叫dubbo請求,provider端(服務提供方)丟擲了自定義的業務異常,但consumer端(服務消費方)拿到的並不是自定義的業務異常。

這是為什麼呢?還需要從dubbo的exceptionfilter說起

我們來看看dubbo官方文件的推薦處理方式是什麼

dubbo在**中的處理方式是什麼?

從上面我們可以看出,dubbo的處理方式主要是:

1、 如果provider實現了genericservice介面,直接丟擲

2、 如果是checked異常,直接丟擲

3、 在方法簽名上有宣告,直接丟擲

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

5、 是jdk自帶的異常,直接丟擲

6、 是dubbo本身的異常,直接丟擲

7、 否則,包裝成runtimeexception拋給客戶端

接下來我們來測試一下

我們自定義乙個selfexception

在服務端中丟擲乙個自定義的異常

啟動服務對並對服務端進行訪問,我們可以發現

服務端的日誌

客戶端的日誌

可以看出, 我們這裡並沒有拋出自定義的異常, 從而會導致客戶端沒有捕捉到自定義的異常.

如何正確捕獲業務異常

丟擲乙個自定義異常有這麼麻煩嗎? 主要原因是dubbo沒有支援的原因.

既然這樣,我們把dubbo變的支援不就可以了?

是的.把原始碼改一下就ok了.如下:

或者直接將117行的runtimeexception替換成自己的自定義異常!這樣就從根本上解決了異常處理的問題.後續有其他問題,也可以直接修改.

全域性異常處理 springBoot 全域性異常處理

先讚後看,月入百萬 springboot開發的web專案中,強調分層的概念,乙個完整的專案一般會劃分出controller層和service層。因此,為了 的可維護性,controller層 應該盡量簡潔,驗證一下引數,直接丟給service層處理即可 異常處理的方式無外乎兩種 在springboo...

全域性異常處理

3 丟擲異常類的使用 處理 介面無權訪問異常accessdeniedexception param e return exceptionhandler accessdeniedexception.class public responseentity handleaccessdeniedexcept...

struts 異常處理 全域性異常處理

記錄一下全域性異常處理的過程 處理主動丟擲的異常,轉向錯誤提示頁面。1 寫乙個自己的異常,繼承runtimeexception,從父類生成構造方法 package me.yndy.srtp.exception suppresswarnings serial public class errorexc...