【问题标题】:How can I make sure REST Http requests do not take more than 15 seconds in Java Spring boot如何确保 REST Http 请求在 Java Spring boot 中花费的时间不超过 15 秒
【发布时间】:2020-03-18 02:07:11
【问题描述】:

我正在构建一个 Spring Boot 微服务,我将在其中经常调用 Web 服务。

我的服务提供商和我的客户之间的 SLA 服务级别协议是 15 秒..但是我可以在这 15 秒内尽可能多地调用网络服务..

有什么方法可以确保我的请求和响应时间不超过 15 秒?

有没有办法用 Java/spring boot 做到这一点?

【问题讨论】:

  • 如果您的服务的 SLA 是 15 秒,那么您可能希望您的出站请求在 15 秒内超时,以便您有时间构建并返回超时响应给您的客户端并保持在您的 SLA 范围内。

标签: java rest spring-boot microservices


【解决方案1】:

我发现 Spring Restemplate 有一个超时功能。 欢迎任何更好的解决方案:)

@Configuration
public class Config {

    @Value("${custom.rest.connection.connect-timeout}")
    private int connectionTimeout;

    @Value("${custom.rest.connection.read-timeout}")
    private int readTimeout;

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {

        return restTemplateBuilder
                .setConnectTimeout(Duration.ofSeconds(connectionTimeout))
                .setReadTimeout(Duration.ofSeconds(readTimeout))
                .build();
    }
}

在 application.config 上

#connection
custom.rest.connection.connection-request-timeout=10000
custom.rest.connection.connect-timeout=10000
custom.rest.connection.read-timeout=10000

【讨论】:

  • 你试过@Transactional(timeout = 15)吗?可以在here 找到有关此的文档。还有example:P
  • 这属于断路器模式,Hystrix 超时 timeoutInMilliseconds 应该适合场景。
  • 您似乎设置了 10,000 秒的超时时间,这不是您的计划。 :)
  • 请注意,连接超时时间为 10 秒,读取超时时间为 10 秒,您可能需要等待总共 20 秒才能得到响应。
  • 另外,重要的是要知道读取超时不是服务器完成发送响应的超时,而是开始发送响应的超时。如果有大量数据或连接速度很慢,您的请求仍然可能比指定的超时时间更长,而不会超时。
猜你喜欢
  • 1970-01-01
  • 2016-04-23
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 2020-07-28
  • 1970-01-01
  • 2021-09-22
相关资源
最近更新 更多