java - 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]
我不知道哪里出了问题,我应该怎么做才能避免这个问题?这是关键依赖版本:
- 春云:Hoxton.SR1
- Reactor-Netty:v0.9.19.RELEASE
- Spring Boot:2.3.10.RELEASE
解决方案
推荐阅读
- reactjs - TSX 脚本的意外令牌
- bash - PS1 不回显反斜杠
- ios - 第一个函数只有在执行完其他代码后才开始执行
- karate - 我无法理解空手道中的动态数据表场景
- java - 无法获取订阅者子账户 SAP Cloud 平台 -CF 的目的地
- raspberry-pi3 - 如何在 pi3 上安装签名版本?
- css - react-native:仅适用于 android/ios 的平台特定样式代码
- typo3 - 如何在 TYPO3 9.5.5 中正确设置 tx-news 的 url-routing?
- php - PHP - 使用 SESSION 的权限问题
- java - Selenium:无法单击通过 JS 和简单格式化方式完成查找元素时找到的按钮