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...