【问题标题】:RestTemplate not timing out after setting connectTimeout and readTimeout设置 connectTimeout 和 readTimeout 后 RestTemplate 未超时
【发布时间】:2019-04-22 11:23:43
【问题描述】:

我有很少微服务的 Spring Boot 基础设施。他们彼此之间的交流非常好。其中一个微服务有一些第三方调用,通过http调用一些第三方服务。 我已经定义了自己的 RestTemplate,并在 init() 方法中设置了 connectTimeout 和 readTimeout。 从堆栈跟踪中,我看到使用了我的 rest 模板。

  @PostConstruct
  public void init() {

    HttpComponentsClientHttpRequestFactory requestFactory =
        new HttpComponentsClientHttpRequestFactory();
    requestFactory.setConnectTimeout(connectTimeout);
    requestFactory.setReadTimeout(readTimeout);
    this.restTemplate = new RestTemplate(requestFactory);
  }

问题是一些请求处理了几分钟并且没有抛出异常。 (我的超时时间要少得多 - 大约 5-10 秒) 可能是什么原因?有什么想法吗?

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    缺少对 setConnectionRequestTimeout(...) 的调用;

    HttpComponentsClientHttpRequestFactory requestFactory =
            new HttpComponentsClientHttpRequestFactory();
    requestFactory.setConnectTimeout(connectTimeout);
    requestFactory.setReadTimeout(readTimeout);
    requestFactory.setConnectionRequestTimeout(...);
    this.restTemplate = new RestTemplate(requestFactory);
    

    Spring RestTemplate timeout

    【讨论】:

    • 这是我正在考虑的事情,但您能否进一步澄清一下这将如何表现?我们什么时候会有连接超时和连接请求超时?提前致谢。
    • @saferJo 嘿,您可以找到差异的说明 (stackoverflow.com/questions/39256157/…)。进一步了解您正在尝试做的事情,我相信您真正想要设置的是 socketTimeout 请参阅 (baeldung.com/rest-template) 第 8 节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2018-06-29
    • 2019-06-05
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多