微服務-基於Grpc的程序通訊-Grpc異常捕獲RpcException(4-4)
阿新 • • 發佈:2021-11-01
在Grpc的實際使用中,需要對Grpc的異常進行封裝,在架構時發現,客戶端中正常的Exception無法捕獲到在Grpc服務端丟擲的異常,經過仔細排查問題得到解決,記錄下便於查漏補缺
程式碼結構如下:其中GrpcClientAPi為客戶端,GrpcServer為服務端。
首先在ProtobufNet中自定義一個ApiException類,繼承自Exception
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重新進行過處理。
以上,僅用於學習和總結
在GrpcClientApi中定義了中介軟體LogRequestMiddleware用於捕獲異常。如果丟擲了ApiException異常,則會被我們捕獲
(1)ApiException例項測試: 客戶端GrpcClientAPi: 中介軟體LogRequestMiddleware: 結果: 然而,在服務端GrpcServer丟擲ApiException異常,中介軟體無法攔截具體的錯誤資訊 (2)ApiException在Grpc的例項測試 客戶端GrpcClientAPi:服務端GrpcServer:
中介軟體不變,結果如下: 無法捕獲到自定義的異常。於是去官網搜了下rpc異常的相關資料,RpcException特地用於在rpc中進行異常處理。 參考地址: