zoukankan      html  css  js  c++  java
  • 微服务-基于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重新进行过处理。
     
    以上,仅用于学习和总结

  • 相关阅读:
    低调做人
    《论语》中发现的问题
    Magic
    雨中游桃花岛
    说完足球说篮球
    转发一个小游戏:看看自己像哪位名人?
    发几个脑筋急转弯题
    Cynthia 终于决定做SOHO
    我家楼上的故事
    上班苦于不能上msn、qq的朋友们有福了
  • 原文地址:https://www.cnblogs.com/ywkcode/p/15493943.html
Copyright © 2011-2022 走看看