Spring boot RestTemplate超时未在30秒以上工作
当我调用我的服务获取大量数据时,返回响应大约需要80-90秒(这不是一个好的设计,但这是另一个问题)。我试图在客户端将rest模板超时时间增加到120秒以上。客户端是一个spring批处理作业。但它不起作用。保持30秒左右的计时是很重要的。当客户端在本地计算机上,而我正在调用的服务正在服务器上运行时,就会发生这种情况。当客户机和服务位于服务器上时也是如此。错误:我获取504网关异常超时。我调用的服务工作正常,只是返回数据需要太多时间。 但是当客户端和服务在本地机器上运行时,超时工作正常。有人知道这是什么原因吗 以上是守则的相关部分 下面是我调试后的发现Spring boot RestTemplate超时未在30秒以上工作,spring-boot,networking,timeout,httpclient,resttemplate,Spring Boot,Networking,Timeout,Httpclient,Resttemplate,当我调用我的服务获取大量数据时,返回响应大约需要80-90秒(这不是一个好的设计,但这是另一个问题)。我试图在客户端将rest模板超时时间增加到120秒以上。客户端是一个spring批处理作业。但它不起作用。保持30秒左右的计时是很重要的。当客户端在本地计算机上,而我正在调用的服务正在服务器上运行时,就会发生这种情况。当客户机和服务位于服务器上时也是如此。错误:我获取504网关异常超时。我调用的服务工作正常,只是返回数据需要太多时间。 但是当客户端和服务在本地机器上运行时,超时工作正常。有人知道
我敢肯定这对你们所有人来说都是一个很好的脑筋急转弯。本地没有网络。当连接到服务器时,有一个网络和该网络中的许多不同组件。每个组件也将有一个超时。看起来您的网络中有一些路由器/防火墙,如果没有收到任何消息,它会在x秒后超时(504)。您的代码对此无能为力,您需要尽快开始通过(服务器)发送信息。是否有任何事务正在运行?如果是,则可能是交易timeout@SimonMartinelli这只是一个电话。我没有在我的代码中使用#transaction#或它的依赖项(如果您指的是它的话)to@M.Deinum是的,这就是我害怕的。但有一件事我非常确定,当服务和批处理作业都在服务器上运行时。它们之间没有防火墙。但可能还有其他因素会导致。我希望我能更多地了解网络组件的工作原理:(当事情在同一台服务器上时,并不意味着流量也在本地路由!。很可能它首先通过路由器返回到计算机。特别是在使用主机名/域名等时。因此,在同一台服务器上物理运行的某个事实并不意味着它就这样被访问!本地没有网络rk.当连接到服务器时,有一个网络和该网络中的许多不同组件。每个组件也将有一个超时。看起来网络中有一些路由器/防火墙,如果没有收到任何消息,它将在x秒后超时(504)。您的代码对此无能为力,您需要开始通过(服务器)发送信息更快。是否有任何正在运行的事务?如果是,则可能是该事务timeout@SimonMartinelli这只是一个get调用,我没有在我的代码中使用#transaction或它的依赖项(如果您所指的话)to@M.Deinum是的,这正是我所担心的。但有一件事我很确定,当服务和批处理作业都运行时正在服务器上运行。它们之间没有防火墙。但可能有其他组件导致此问题。我希望了解更多有关网络组件工作原理的信息:(当事情在同一台服务器上时,并不意味着流量也在本地路由!。很可能它首先通过路由器返回到计算机。特别是在使用主机名/域名等时。因此,某些东西在同一台服务器上实际运行,并不意味着它就这样被访问!
@Controller
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate(clientHttpRequestFactory());
}
private ClientHttpRequestFactory clientHttpRequestFactory() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(120000);
factory.setConnectTimeout(120000);
return factory;
}
}