我有一些微服务的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秒)
可能是什么原因?有任何想法吗?

最佳答案

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

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


Spring RestTemplate timeout

关于java - 设置connectTimeout和readTimeout后RestTemplate不超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55793608/

10-13 03:42