当前位置:

resttemplate的ReadTimeout和ConnectTimeout

故人归 |  2025-07-13
 130人浏览

问题描述:
今天,在做微服务开发中,A服务区调用B服务,获取数据做导出excel操作。A服务出现了“java.net.SocketTimeoutException: Read timed out ”错误。

ConnectTimeout 连接超时

指的是 建立连接超时 ,也就是 A服务连接不上B服务,也许是B服务挂掉了,会抛出"java.net.SocketException: connetct time out",也许是网络差到不能建立连接的地步。

ReadTimeout 读写超时

指的是建立连接成功后 从服务器读取超时 ,就像我遇到的这种情况样。B服务需要查询大量的数据,进行准备。A在一定时间后,抛出"java.net.SocketTimeoutException: Read timed out

ConnectionRequestTimeout

连接不共用的时候,等待连接超时。

关于参数的设置

建议:
ConnectTimeout大小视网络环境
ReadTimeout大小视应用程序操作,适当大一点。
ConnectionRequestTimeout 不宜过长。

           @Configuration
           public class BeanConfig{
    
               @Bean
    
               public RestTemplate createRestTemplate(){
    
                   HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
    
                  httpRequestFactory.setConnectionRequestTimeout(3000);
    
                   httpRequestFactory.setConnectTimeout(3000);
    
                   httpRequestFactory.setReadTimeout(6000);
    
                   return new RestTemplate(httpRequestFactory);
    
               }
    
           }

文章评论