1. 程式人生 > 其它 >微服務-基於Grpc的程序通訊-Grpc異常捕獲RpcException(4-4)

微服務-基於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中進行異常處理。 參考地址:
https://docs.microsoft.com/zh-cn/dotnet/architecture/grpc-for-wcf-developers/error-handling
(3)RpcException測試 客戶端GrpcClientAPi不變 服務端GrpcServer: 中介軟體新增對RpcException的捕獲: 結果: (4)Exception測試 結果: 總結: 在Grpc中,自定義的Exception(本文以ApiException為例),無法被顯示識別,除了官方提供的RpcException,但奇怪的是ApiException和RpcExceprion都繼承自Exception。 猜測應該在返回結果時統一對Grpc的異常通過RpcException重新進行過處理。 以上,僅用於學習和總結