微服务-基于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重新进行过处理。
 
以上,仅用于学习和总结

原文地址:https://www.cnblogs.com/ywkcode/p/15493943.html