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

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,而且它觉得调用服务两次是不对的。 是否有一种方法可以调用该服务一次,并在成功时将响应解析

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

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

  • 问题内容: 我在Windows7上使用maven2.1并得到上述错误。可以提供有关如何解决此问题的建议吗?我使用的是jdk1.6。我收到小程序警报。如何自动允许所有 问题答案: 检查Maven存储库中的.jar文件,使用WinRAR或其他方法打开它们。需要一些时间。您无需检查所有内容,只需检查您最近下载的内容即可。该存储库通常称为“ m2”或“ .m2”,并且通常位于用户配置文件或主目录中,具体取

  • 前端请求文件模板,代码生成excel模板。其中有一列数据要做成下拉的模式。 功能也实现了。 但是如果下拉列表的下拉项过多。下载出的文件模板,下拉项点击无法展示出来。20多个下拉选项是可以正确下拉的,40多个就不行了。这个如果解决??