gpt4 book ai didi

spring-boot - 上游连接错误或在 header 之前断开连接/重置。重置原因:使用Spring Boot时连接终止

转载 作者:行者123 更新时间:2023-12-02 12:12:10 34 4
gpt4 key购买 nike

我正在将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 分析此问题。我遵循了运营团队建议的一些步骤。

  • 将Tomcat Server中的超时时间增加到60秒,因为他们已经在Envoy中配置了
  • 我确实增加了时间,但无法解决问题。
  • 我正在使用Spring Cloud Gateway提供网关服务,我认为这是问题所在,因此我将其更改为Rest模板,但这也无法解决问题。
  • 幸运的是,运行状况检查API正常运行,但那些在内部与其他服务进行通信的API除外。在Health API中,他们还与其他服务进行通信以检查其Health,但我没有直接返回响应。我包装了修改它的响应正文并将其转发到UI。我还应用了相同的代码,并使用下面的代码(您很容易理解):创建了一个新的Response Entity,并删除了从内部API接收并返回到UI的所有 header 。它像魅力一样运作。


  • //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/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com