问题描述
通过Nginx并发发送grpc请求时,在客户端收到:
Caused by: io.netty.handler.codec.http2.Http2Exception$StreamException: Cannot create stream 2015 greater than Last-Stream-ID 2001 from GOAWAY.
at io.netty.handler.codec.http2.Http2Exception.streamError(Http2Exception.java:147)
at io.netty.handler.codec.http2.DefaultHttp2Connection$DefaultEndpoint.checkNewStreamAllowed(DefaultHttp2Connection.java:874)
at io.netty.handler.codec.http2.DefaultHttp2Connection$DefaultEndpoint.createStream(DefaultHttp2Connection.java:748)
at io.netty.handler.codec.http2.DefaultHttp2Connection$DefaultEndpoint.createStream(DefaultHttp2Connection.java:668)
at io.netty.handler.codec.http2.DefaultHttp2ConnectionEncoder.writeHeaders0(DefaultHttp2ConnectionEncoder.java:201)
at io.netty.handler.codec.http2.DefaultHttp2ConnectionEncoder.writeHeaders(DefaultHttp2ConnectionEncoder.java:167)
at io.netty.handler.codec.http2.DecoratingHttp2FrameWriter.writeHeaders(DecoratingHttp2FrameWriter.java:53)
at io.netty.handler.codec.http2.StreamBufferingEncoder.writeHeaders(StreamBufferingEncoder.java:153)
at io.netty.handler.codec.http2.StreamBufferingEncoder.writeHeaders(StreamBufferingEncoder.java:141)
at io.grpc.netty.NettyClientHandler.createStreamTraced(NettyClientHandler.java:579)
at io.grpc.netty.NettyClientHandler.createStream(NettyClientHandler.java:562)
at io.grpc.netty.NettyClientHandler.write(NettyClientHandler.java:323)
不使用Nginx直接请求grpc服务器时,没有报错。
解决方法
http://nginx.org/en/docs/http/ngx_http_v2_module.html
行为由 http2 模块控制,而不是由 grpc 模块控制:
http2_recv_buffer_size 1024k;
http2_max_requests 2147483647;
http2_max_concurrent_streams 200;