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

java - spring RestTemplate报错, read Timeout Connection reset?

杨志强
2024-02-27

读取超时, 连接超时, 写这个代码的人走了

@Bean    public OAuth2RestTemplate baseRestTemplate() {        // jwt        AuthTokenResourceDetails resource = new AuthTokenResourceDetails();        resource.setAccessTokenUri("token_url");        // token context        AuthTokenClientContext context = new AuthTokenClientContext();        context.setTokenKey("token_key");        OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(resource, context);        // auth token refresh        AuthTokenAccessTokenProvider tokenAccessTokenProvider = new AuthTokenAccessTokenProvider();        tokenAccessTokenProvider.setInterceptors(Collections.singletonList(new CommonHeadersInterceptor("1.0")));        tokenAccessTokenProvider.setRequestFactory(new HttpComponentsClientHttpRequestFactory());        oAuth2RestTemplate.setAccessTokenProvider(tokenAccessTokenProvider);        // token attach        OAuth2RequestAuthenticator authenticator = new AuthTokenOAuth2RequestAuthenticator();        oAuth2RestTemplate.setAuthenticator(authenticator);        // Interceptors        oAuth2RestTemplate.setInterceptors(Collections.singletonList(new CommonHeadersInterceptor("1.0")));        oAuth2RestTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());        return oAuth2RestTemplate;    }

这是专门用来调某个三方的, 现在的问题是会有报错, 超时,连接断开, 之前很多, 升级之后就少了, 但还是有这种情况
image.png
image.png

目前我的解决方案是调用失败之后重试三次, 基本重试之后都会成功
但想解决这种报错应该怎么解决呢
看网上说的设置readTimeOut和connectionTimeout都没用
就想问问各位大佬这个问题的原因和解决方式有哪些呢?

共有2个答案

师俊健
2024-02-27

readTimeOut:那就增加读取超时时间,这一般是服务器处理比较久导致的
Connection reset:一般是服务器没有给你写响应直接断开了连接,我在上传文件时,文件超出配置的大小,http协议就会出现Connection reset,服务器先要接收完请求,再去写响应。上传文件超出大小,服务器直接说我就不接收了拜拜

姜煌
2024-02-27

这个问题可能是由于多种原因引起的,包括网络问题、服务器问题、客户端配置问题等。以下是一些可能的解决方案:

  1. 增加超时时间:你可以尝试增加 HttpComponentsClientHttpRequestFactoryreadTimeoutconnectionTimeout 属性值。这可以在创建 HttpComponentsClientHttpRequestFactory 的时候设置,像这样:
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();requestFactory.setReadTimeout(10000); // 10 secondsrequestFactory.setConnectionTimeout(10000); // 10 secondsoAuth2RestTemplate.setRequestFactory(requestFactory);

注意:这会增加客户端等待服务器响应的时间,可能会影响到你的应用的性能。

  1. 检查服务器端:如果增加超时时间没有解决问题,那么可能是服务器端的问题。你需要检查服务器端的性能,看看是否有任何可能导致延迟或超时的因素。
  2. 重试机制:你已经实施了一个重试机制,这是一个很好的做法。你可以尝试调整重试的次数和间隔,看看是否可以更好地处理超时和连接断开的问题。
  3. 查看日志:查看客户端和服务器端的日志,看看是否有任何有用的信息可以帮助你诊断问题。
  4. 更新库和依赖:确保你使用的 Spring 和其他相关库都是最新的版本。有时候,这种问题可能是由于库的 bug 引起的,而这些 bug 可能在更新的版本中已经被修复。
  5. 使用不同的网络:如果可能的话,尝试在不同的网络环境下运行你的应用,看看问题是否仍然存在。这可以帮助你确定问题是否与特定的网络环境有关。

希望这些建议能帮助你解决问题。如果你还有其他问题或需要更多的帮助,请随时向我询问。

 类似资料:
  • 给Rest服务打电话 http://acme.com/app/widget/123 返回: 此客户端代码的工作原理是: 但是,http://acme.com/app/widget/456返回: 但此客户端代码引发了一个异常: 我试过: 第二次调用只是抛出了另一个HttpClientErrorException,而且它觉得调用服务两次是不对的。 是否有一种方法可以调用该服务一次,并在成功时将响应解析

  • 写了一个简单的插入语句,但是一直报错: ### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the r

  • 嗨,我听到一个错误的说法 组件根本不处理整数。 有时我也会得到作为警报。

  • 有没有大佬来帮我看一看,是关于github actions的,我在实现一个推送代码到指定分支上时,会自动触发在远程目标服务器上面部署运行springboot项目,但是每一次运行到以下代码的时候: 它就会一直卡在这里。但是事实上,这一个项目是被正确运行了,监听端口也有信息,但是工作流中会报错: 我有一点不明白,部署成功之后,不就是应该断开ssh连接吗?有没有大佬解决一下? 因为这个地方报错,所以它工

  • 我的问题:三个线程的ID分别是A,B,C;,每个线程将自己的ID值在屏幕上打印5遍,打印顺序是ABCABC。 我编写的代码: 但是出现了错误 哪个地方出现了问题呢?