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

  • 相关阅读:
    KY2成绩排序
    python 获取list中元素的索引
    pandas 读取指定一列数据
    python 删除列表中的第一位元素
    python 时间戳
    python 除法保留小数点后两位
    python 读取excel表格的一列数据并去重
    python中获取Excel表格sheet页整页内容
    IDEA创建spring boot项目
    servlet一些问题
  • 原文地址:https://www.cnblogs.com/ywkcode/p/15493943.html
Copyright © 2011-2022 走看看