配置gRPC客户端与服务端消息上限为64MB仍触发大小限制错误如何解决
gRPC消息大小限制报错解决办法
你遇到的报错显示当前生效的消息大小上限仍为默认的4MB(4194304字节),说明你配置的64MB限制未生效,可按照以下步骤排查解决:
- 确认配置未被覆盖
先打印验证你配置的64*1024*1024计算值为67108864,检查创建channel、server的代码之后是否存在其他逻辑重置了参数,或者有全局gRPC配置覆盖了自定义参数。 - 兼容旧版本Python gRPC的参数
1.39.0之前的Python gRPC版本会优先读取已废弃的grpc.max_message_length参数,忽略拆分的收发参数,你需要在客户端和服务端的配置中都补充该参数:
客户端配置修改为:
服务端配置修改为:options = [ ('grpc.max_send_message_length', 64*1024*1024), ('grpc.max_receive_message_length', 64*1024*1024), ('grpc.max_message_length', 64*1024*1024) ] channel = grpc.secure_channel(channel_endpoint, grpc.ssl_channel_credentials(), options)choptions = [ ('grpc.max_send_message_length', 64*1024*1024), ('grpc.max_receive_message_length', 64*1024*1024), ('grpc.max_message_length', 64*1024*1024) ] server = grpc.server(futures.ThreadPoolExecutor(max_workers=max_workers), options=choptions) - 排查中间链路限制
如果gRPC请求经过Nginx、Envoy、负载均衡、API网关等中间组件,这些组件默认也会设置gRPC消息大小上限,需要同步修改对应组件的配置,例如Nginx需要将grpc_buffer_size调整为不小于64MB的数值。 - 补充单次调用的参数配置
如果使用的是流式传输接口,除全局配置外,你还可以在单次RPC调用时指定消息大小限制,示例如下:response = stub.YourRpcMethod( request, options=[ ('grpc.max_send_message_length', 64*1024*1024), ('grpc.max_receive_message_length', 64*1024*1024) ] )
内容的提问来源于stack exchange,提问作者Dhivakhar Venkatachalam
相关产品推荐
相关产品推荐

