当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Application-任何RestAPIendpoint的默认超时是什么或控制所有endpoint超时的简单配置

马新觉
2023-03-14

我正在使用当前的Spring boot版本(1.4.x),并想知道它是否有api调用的默认超时。我通过设置断点来测试它,但它一直在等待,没有超时。我还尝试通过使用一些注释或yml设置来配置所有spring boot应用程序的默认超时。

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

共有3个答案

督阿苏
2023-03-14

有几种方法可以做到这一点:

1) 将 ClientHttpRequestFactoryRestTemplate 一起使用

public RestTemplate restTemplate() {
    return new RestTemplate(clientHttpRequestFactory());
}

private ClientHttpRequestFactory clientHttpRequestFactory() {
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setReadTimeout(timeinMillis);
    factory.setConnectTimeout(timeinMillis);
    return factory;
}

2) 第二种方法是使用callable,但我想您已经探索了这个解决方案。

曾新立
2023-03-14

我同意以上所有选项,并在我的Spring启动应用程序中尝试了以下选项。它现在工作得非常好。下面是作为bean的代码示例。现在只需要在我需要的任何地方(< code>java类)使用< code > @ Autowire < code > rest template 。

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

        return restTemplate;
    }
欧阳山
2023-03-14

您可以尝试<code>服务器。在application.properties中,连接超时=5000。根据官方文件:

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

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

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

这叫做断路器模式,在一个叫做Hystrix的框架中已经有了它的实现。这里有一篇很好的文章深入解释了它:http://www.baeldung.com/spring-cloud-netflix-hystrix. Spring Cloud Fei Spring Cloud Hystrix看起来真的很好,特别是考虑到他们与开箱即用的发现服务(例如Spring Cloud Eureka)一起工作。

 类似资料:
  • 问题内容: 我正在使用当前的Spring引导版本(1.4.x),想知道它是否对api调用有任何默认超时。我已经通过设置断点对其进行了测试,但是它一直处于等待状态,并且没有超时。我还尝试通过使用一些注释或yml设置为所有春季启动应用程序配置默认超时。 我发现了几种替代方法(这里是其中一种),但实际上使用callable会添加额外的非业务逻辑代码,其中在xmlbean中设置某些内容在最新的Spring

  • 问题内容: 我似乎有时会遇到一些tcp请求被“卡住”的麻烦,就像它正在等待一些响应,但连接已被“切断”,因此响应永远不会到来。这是具有默认超时的HttpURLConnection的预期行为吗?是否设置了明智的默认设置,以便默认情况下我无法进入这种奇怪的“挂起”情况? 问题答案: 出现HttpURLConnection的“默认”超时为零,表示“无超时”。 不幸的是,根据我的经验,根据您与服务器的连接

  • 问题内容: Python 3.4。尝试在urllib.request.urlopen()中查找默认超时是多少。 它的签名是:urllib.request.urlopen(URL,data = None,[timeout,] *,cafile = None,capath = None,cadefault = False,context = None) 该文档称其为“全局默认超时”,并查看其代码:so

  • 问题内容: 我感兴趣的selenium超时的默认值,和。因为我想知道,我需要为这些超时设置值吗?或默认值适合selenium webdriver工作。但是我找不到正确的答案,有人说默认值是0,而另一个人说是30秒。 问题答案: 这三个超时由Selenium方程的服务器端管理。您的脚本(使用Java,Python,Ruby,C#或其他任何语言)是将命令发送到位于浏览器中的服务器的客户端。(可能会有中

  • 问题内容: 默认情况下,PHP会话是否超时-即,如果我没有任何编码,最终在一段时间不活动后最终将“注销”用户吗? 问题答案: 这取决于服务器配置或相关指令的session.gc_maxlifetime在。 通常情况下,默认值为24分钟(1440秒),但是您的虚拟主机可能已将默认值更改为其他值。

  • 在JSF2应用程序中,当文件中没有明确提到会话超时时,会话超时是什么? 更新:我正在使用Tomcat,请参阅此处有关Tomcat中默认超时的相关帖子。