Spring Boot 应用程序 - 什么是任何 rest API 端点的默认超时或控制所有端点超时的简单配置

新手上路,请多包涵

我正在使用当前的 Spring 引导版本 (1.4.x) 并想知道它是否有任何默认的 api 调用超时。我已经通过放置断点对其进行了测试,但它一直在等待并且没有超时。我还试图通过使用一些注释或 yml 设置为我所有的 spring-boot 应用程序配置默认超时。

我找到了几个替代方案(其中一个在 这里)但是使用 callable 实际上添加了额外的非业务逻辑代码,其中在 xml bean 中设置某些东西在最新的 spring boot 应用程序中已经过时了。

原文由 Gunjan Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 535
2 个回答

我同意以上所有选项,并在我的 spring boot 应用程序中尝试了以下选项。它现在工作得很好。下面是作为 bean 的代码示例。现在只需要 @Autowire RestTemplate 任何地方( java class )我需要它。

    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        ((SimpleClientHttpRequestFactory) restTemplate.getRequestFactory()).setConnectTimeout(15000);
        ((SimpleClientHttpRequestFactory) restTemplate.getRequestFactory()).setReadTimeout(15000);

        return restTemplate;
    }

原文由 Gunjan Kumar 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以在 application.properties 中尝试 server.connection-timeout=5000 。来自 官方文档

server.connection-timeout= # 连接器在关闭连接之前等待另一个 HTTP 请求的时间(以毫秒为单位)。如果未设置,将使用连接器特定于容器的默认值。使用值 -1 表示没有(即无限)超时。

更新:刚刚注意到你使用微服务架构,所以如果你需要在微服务之间通信时处理超时,我建议在客户端而不是服务器端处理它。 如果您尝试调用的微服务过载并且其性能下降到严重影响用户体验的程度,有时返回一些回退数据比仅仅丢弃请求更好。

想象一下,我们有一个具有微服务架构的电子商务网站,其中一个向用户提供建议的微服务变得非常慢。在这种情况下,首选的解决方案是返回一些可能是本月前 10 大热门产品的后备数据,而不是向客户显示 5xx 错误页面。此外,如果后续请求因超时而失败,我们可以决定避免向“推荐服务”发送请求并立即返回回退数据。一段时间后,我们可以尝试再次向“推荐服务”发送请求,如果它变得健康 - 只需使用它而不是回退数据。

这称为 断路器 模式,并且已经在称为 Hystrix 的框架中实现了它。这是一篇深入解释它的好文章: http ://www.baeldung.com/spring-cloud-netflix-hystrix。 Spring Cloud Feign + Spring Cloud Hystrix 看起来非常好,特别是考虑到它们可以开箱即用地使用发现服务(例如 Spring Cloud Eureka)。

原文由 Danylo Zatorsky 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题