微服務-基於Grpc的進程通信-Grpc異常捕獲RpcException(4-4)


在Grpc的實際使用中,需要對Grpc的異常進行封裝,在架構時發現,客戶端中正常的Exception無法捕獲到在Grpc服務端拋出的異常,經過仔細排查問題得到解決,記錄下便於查漏補缺
 
代碼結構如下:其中GrpcClientAPi為客戶端,GrpcServer為服務端。
 
 
首先在ProtobufNet中自定義一個ApiException類,繼承自Exception

在GrpcClientApi中定義了中間件LogRequestMiddleware用於捕獲異常。如果拋出了ApiException異常,則會被我們捕獲

 

 

(1)ApiException實例測試:
客戶端GrpcClientAPi:
中間件LogRequestMiddleware:
結果:
 

 

 

 
然而,在服務端GrpcServer拋出ApiException異常,中間件無法攔截具體的錯誤信息
 
(2)ApiException在Grpc的實例測試
客戶端GrpcClientAPi:

 

 服務端GrpcServer:

中間件不變,結果如下:

 

 

無法捕獲到自定義的異常。於是去官網搜了下rpc異常的相關資料,RpcException特地用於在rpc中進行異常處理。
(3)RpcException測試
客戶端GrpcClientAPi不變
服務端GrpcServer:
中間件添加對RpcException的捕獲:
結果:

 

 

(4)Exception測試
結果:
 

 

 

總結:
在Grpc中,自定義的Exception(本文以ApiException為例),無法被顯示識別,除了官方提供的RpcException,但奇怪的是ApiException和RpcExceprion都繼承自Exception。
猜測應該在返回結果時統一對Grpc的異常通過RpcException重新進行過處理。
 
以上,僅用於學習和總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM