我正在将Spring Boot与Embedded Tomcat 9.0.36一起使用。它在Kubernetes中用作Docker镜像。最近,升级特使后,我开始遇到异常。
"upstream connect error or disconnect/reset before headers. reset reason: connection termination" with 503 status code
有人建议将闲置连接超时增加到60秒,但是它可以自动引导我找到“连接超时”和“保持 Activity 超时”。我使用下面的代码将它们增加到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中。我可以在服务中看到成功的响应,但是之后,看不到任何日志。
最佳答案
我花了一个星期从应用程序的 Angular 分析此问题。我遵循了运营团队建议的一些步骤。
//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());
}
关于spring-boot - 上游连接错误或在 header 之前断开连接/重置。重置原因:使用Spring Boot时连接终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61460578/