【问题标题】:grpc: received message larger than max (8653851 vs. 4194304)grpc:收到的消息大于最大值(8653851 与 4194304)
【发布时间】:2019-08-17 03:25:52
【问题描述】:

问题

我在 grpc 中接收消息时收到此错误:

rpc error: code = ResourceExhausted desc = grpc: received message larger than max (8653851 vs. 4194304)

我尝试了什么:

我提供了增加要接收的消息大小的选项,但它仍然给出相同的错误,这意味着最大大小的设置不起作用:

size := 1024 * 1024 * 12
opts = append(opts, grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(size)))
conn, err := grpc.Dial(address, opts...)

评论:

默认限制为1024 * 1024 * 4 = 4194304,显示在错误消息中。我原以为这个限制会增加到1024 * 1024 * 12 = 12582912,但显然没有。

【问题讨论】:

  • 奇怪,对我有用。你能把它简化为一个完整的可重现的例子吗?

标签: go grpc grpc-go


【解决方案1】:

调用选项可以随每个请求一起传递。

例如,如果你的包被称为queue,而你的方法被称为GetItems,那么你在调用GetItems时会传入MaxCallRecvMsgSize选项。

Protobuf:

package queue;

service Queue {
    rpc GetItems (Request) returns (Items) {
    }
}

去:

conn, err := grpc.Dial(address, opts...)
c := queue.NewQueueClient(s.Conn)
maxSizeOption := grpc.MaxCallRecvMsgSize(32*10e6)
items, err := c.GetItems(ctx, &queue.Request{}, maxSizeOption)

【讨论】:

    【解决方案2】:

    请尝试在您的客户端上更新grpc.MaxCallSendMsgSize(s int) 以使您的客户端能够发送更大的消息。 这对我有用。

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 2023-01-24
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多