0

我正在尝试提出更好的方法来处理 grpc 中的 4mb 消息大小限制。我需要一种方法来测量客户端收到的 grpc 响应的大小。当响应超过 4mb 限制时,grpc 会显示如下错误消息:

无法问候:rpc 错误:代码 = ResourceExhausted desc = grpc:收到的消息大于最大值(74000087 与 4194304)

“74000087”是响应的实际大小。这是如何计算的?有没有办法获得这个值?

我已经阅读了有关该主题的多篇文章,但一无所获?有人可以帮忙吗?谢谢。

我的实现是使用 golang

4

2 回答 2

3

计算消息大小

根据原始文档

func Size(m Message) int

Size 返回 m 的线格式编码的大小(以字节为单位)。

gRPC 消息大小限制

grpc.MaxCallRecvMsgSize此外,在您的情况下考虑设置为grpc.CallOption管理限制可能很有用。

于 2020-06-05T19:57:51.117 回答
2

我想出了一个办法来做到这一点。解决方案是将 gRPC 响应编码到byte流中,然后使用 binary.Size()

func GetGRPCResponseSize(val interface{}, desc string) (int, error) {

    var buff bytes.Buffer
    enc := gob.NewEncoder(&buff)
    err := enc.Encode(val)
    if err != nil {
        log.Error("encode error:", err)
        return 0, err
    }
    return binary.Size(buff.Bytes()), nil
}
于 2019-12-11T08:36:50.177 回答