【问题标题】:Performant gRPC rich error handling in GoGo 中的高性能 gRPC 丰富错误处理
【发布时间】:2021-01-13 23:32:27
【问题描述】:

Google 文档提出了以下模型 (https://cloud.google.com/apis/design/errors#error_model) 用于在 gRPC 中发送丰富的错误,但似乎每次都将错误字符串发送给用户。我要做的是发送一个代码,然后在它到达客户端时将其映射到一个字符串。

我想知道proto3 语言支持写入数据以便我在客户端使用它,而无需定义自定义结构来将错误代码映射到错误消息。

【问题讨论】:

  • 每个错误都会发送错误字符串。是不是这么贵的东西,遇到错误就发不起?也许在担心它之前衡量它是否有影响。
  • @Marc 我将它用于带宽非常重要的应用程序。我可以毫无问题地通过连接发送字符串,但用户会通过智能手机连接,大部分时间都在没有任何 Wi-Fi 的位置。我还想将它不仅用于错误处理,还想用于其他功能。
  • 我不认为这会是一个很大的开销,也使用它你可以轻松地更新服务器上的错误,而无需客户端更新
  • 错误应该很少见。优化它们可能是浪费时间。如果它们并不罕见,您可能需要不同的应用程序设计。
  • 你可能是对的。我仍然会使用这种模式来传输不变且经常遇到的数据。

标签: go error-handling grpc protoc


【解决方案1】:

在您的 proto 定义中,定义一个简单的 enum 以及任何额外的错误代码:

enum extraStatusCode {
    UNKNOWN         = 0;  // not set/used
    TOO_MANY_FOOS   = 1;
    NOT_ENOUGH_BARS = 2;
}

并将其作为顶级字段包含在任何返回的 message 中:

message User {
    string uid      = 1;
    string email    = 2;

    // ...

    extraStatusCode = 15;
}

如果使用非零 extraStatusCode 发送消息 - 则遇到边缘情况。

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 2011-04-04
    • 2023-01-20
    • 2021-04-26
    • 2012-01-09
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多