![](/img/trans.png)
[英]upstream connect error or disconnect/reset before headers. reset reason: connection failure. Spring Boot and java 11
[英]upstream connect error or disconnect/reset before headers. reset reason: connection termination when using Spring Boot
我正在使用带有嵌入式 Tomcat 9.0.36 的 Spring 引导。 它在 Kubernetes 中用作 Docker 图像。 最近升级特使后,我开始收到异常。
"upstream connect error or disconnect/reset before headers. reset reason: connection termination" with 503 status code
有人建议将空闲连接超时增加到 60 秒,但它 spring-boot 我能够找出“连接超时”和“保持活动超时”。 我使用下面的代码将它们增加到 5 分钟。
@Configuration public class TomcatCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> { private static final Logger LOGGER = LoggerFactory.getLogger(TomcatCustomizer.class); @Override public void customize(TomcatServletWebServerFactory factory) { factory.addConnectorCustomizers(connector -> { AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) connector.getProtocolHandler(); //Setting up connection time out protocol.setKeepAliveTimeout(360000); protocol.setConnectionTimeout(360000); protocol.setMaxKeepAliveRequests(120); }); } }
不过,我得到了同样的错误。 此应用程序在内部调用另一个服务,该服务也托管在 Kubernetes 中。 我能够在我的服务中看到成功的响应,但在那之后,我看不到任何日志。
我花了一周的时间从应用程序的角度分析了这一点。 我遵循了运营团队建议的几个步骤。
//Earlier (Forwarding same headers received from internal service to UI) ResponseEntity responseEntity = //Received by calling other APIs; return responseEntity; //Now (Dropped headers) ResponseEntity responseEntity = //Received by calling other APIs; MultiValueMap<String, String> newHeaders = new LinkedMultiValueMap<>(); if (Objects.nonNull(responseEntity) && Objects.nonNull(responseEntity.getBody())) { newHeaders.set("Content-type", responseEntity.getHeaders().getContentType().toString()); return new ResponseEntity(responseEntity.getBody(), newHeaders, responseEntity.getStatusCode()); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.