首页 > 解决方案 > reactor.netty.http.client.PrematureCloseException:连接已在响应之前关闭,同时发送请求正文

问题描述

我正在使用spring gateway作为我的微服务网关,但是我现在面临一个奇怪的问题,如果服务一段时间没有使用,下一个请求可能会失败。只有第一个请求失败,下一个请求将恢复正常。这个问题让我非常困惑和挣扎了好几个星期。今天再次出现问题时我正在跟踪服务,显示错误日志如下:

2021-11-14 22:13:16.249 DEBUG 1 --- [or-http-epoll-2] o.s.c.g.h.FilteringWebHandler : Sorted gatewayFilterFactories: [[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RemoveCachedBodyFilter@a0e2db97}, order = -2147483648], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.AdaptCachedBodyGlobalFilter@ca328641}, order = -2147482648], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyWriteResponseFilter@a6142aa8}, order = -1], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardPathFilter@30ca032}, order = 0], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.GatewayMetricsFilter@78bd8c6c}, order = 0], [com.dolphin.gateway.filter.JwtAuthenticationGatewayFilterFactory$$Lambda$974/0x00000000c404bdc0@39c80285, order = 1], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter@91e9dcfa}, order = 10000], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.LoadBalancerClientFilter@aea8142b}, order = 10100], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.WebsocketRoutingFilter@2c4b8029}, order = 2147483646], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyRoutingFilter@7a99a243}, order = 2147483647], [GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardRoutingFilter@5f087b31}, order = 2147483647]]
2021-11-14 22:13:16.257 TRACE 1 --- [or-http-epoll-2] o.s.c.g.f.RouteToRequestUrlFilter : RouteToRequestUrlFilter start
2021-11-14 22:13:16.258 TRACE 1 --- [or-http-epoll-2] o.s.c.g.f.NettyRoutingFilter : outbound route: 0f268439, inbound: [f1e7c862-18422]
2021-11-14 22:13:16.258 WARN 1 --- [or-http-epoll-2] r.n.h.c.HttpClientConnect : [id: 0x0f268439, L:/10.97.196.222:58222 ! R:10.97.100.34/10.97.100.34:11014] The connection observed an error

reactor.netty.http.client.PrematureCloseException: Connection has been closed BEFORE response, while sending request body

2021-11-14 22:13:16.259 ERROR 1 --- [or-http-epoll-2] m.e.JsonExceptionHandler : unhandle exception....
2021-11-14 22:13:16.259 ERROR 1 --- [or-http-epoll-2] o.s.w.s.a.HttpWebHandlerAdapter : [f1e7c862-18422] 500 Server Error for HTTP POST "/dict/word/translate/v1"

java.lang.NullPointerException: The nextFactory returned a null Publisher
at java.util.Objects.requireNonNull(Objects.java:246) ~[?:?]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:88) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:100) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onError(FluxOnAssembly.java:390) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.Operators.error(Operators.java:196) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.MonoError.subscribe(MonoError.java:52) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.Mono.subscribe(Mono.java:4252) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:97) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onError(FluxOnAssembly.java:390) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onError(MonoPeekTerminal.java:251) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onError(MonoPeekTerminal.java:251) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onError(FluxOnAssembly.java:390) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:165) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:185) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:251) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:268) [reactor-core-3.3.16.RELEASE.jar!/:3.3.16.RELEASE]

我不知道哪里出了问题,我应该怎么做才能避免这个问题?这是关键依赖版本:

标签: javaspringnetty

解决方案


推荐阅读