如何修改gRPC的GRPC_ARG_HTTP2_MAX_PING_STRIKES参数解决连接报错
修改gRPC的GRPC_ARG_HTTP2_MAX_PING_STRIKES参数解决GOAWAY连接关闭问题
要修改GRPC_ARG_HTTP2_MAX_PING_STRIKES参数,需要在客户端和服务端的gRPC配置中通过withOption方法显式设置该参数值为0。以下是针对你现有Kotlin配置的修改方案:
客户端配置修改
在NettyChannelBuilder中添加参数配置:
import io.grpc.internal.GrpcUtil.GRPC_ARG_HTTP2_MAX_PING_STRIKES import java.util.concurrent.TimeUnit.SECONDS @Bean fun keepAliveClientConfigurer(): GrpcChannelConfigurer { return GrpcChannelConfigurer { channelBuilder, _ -> if (channelBuilder is io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder) { channelBuilder .keepAliveTime(30, SECONDS) .keepAliveTimeout(5, SECONDS) // 设置最大ping触发次数为0,关闭ping次数限制 .withOption(GRPC_ARG_HTTP2_MAX_PING_STRIKES, 0) } } }
服务端配置修改
同样在NettyServerBuilder中添加参数配置:
import io.grpc.internal.GrpcUtil.GRPC_ARG_HTTP2_MAX_PING_STRIKES import java.util.concurrent.TimeUnit @Bean fun keepAliveServerConfigurer(): GrpcServerConfigurer? { return GrpcServerConfigurer { serverBuilder: ServerBuilder<*> -> if (serverBuilder is NettyServerBuilder) { serverBuilder .permitKeepAliveTime(0, TimeUnit.NANOSECONDS) .permitKeepAliveWithoutCalls(true) // 设置最大ping触发次数为0,关闭ping次数限制 .withOption(GRPC_ARG_HTTP2_MAX_PING_STRIKES, 0) } } }
参数说明
GRPC_ARG_HTTP2_MAX_PING_STRIKES默认值为2,代表当服务端收到超过允许频率的ping请求时,累计到2次就会触发GOAWAY关闭连接(属于gRPC的DDOS防护机制)。- 将值设为0后,服务端会关闭该ping次数限制,不会因为ping请求过多触发
ENHANCE_YOUR_CALM类型的GOAWAY错误,匹配你压测场景下的需求。
内容的提问来源于stack exchange,提问作者Eduardo José
相关产品推荐
相关产品推荐

