一阶魔方还原大师 2024-09-27 19:08 采纳率: 0%
浏览 3

resttemplate远程调用握手超时

在线程池内并发远程请求其他服务的一个接口,开始正常,在差不多5分钟后异常,显示握手超时
java.util.concurrent.CompletionException: org.springframework.web.client.ResourceAccessException: I/O error on POST request for
"http://35.114.114.120:18211/..%22:
Connect to 35.114.114.120:18211 [/35.114.114.120] failed: connect timed out; nested exception is org.apache.http.conn.ConnectTimeoutException: Connect to 35.114.114.120:18211 [/35.114.114.120] failed: connect timed out

尝试降低并发量,但是并没有效果

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-27 19:09
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你的问题描述来看,你正在使用Spring的RestTemplate进行远程调用,并且在并发执行这些调用时遇到了握手超时的问题。这种情况可能由以下几个原因引起:

    1. 网络问题:目标服务器(IP地址为35.114.114.120,端口为18211)可能在执行请求时暂时不可用。这可能是暂时的网络波动或者是目标服务器负载过高导致的响应延迟。可以尝试在网络较为稳定的环境下重试。
    2. 服务端处理时间过长:如果服务端处理请求的时间过长,客户端可能会因为等待超时而抛出握手超时的异常。这种情况下,你需要检查服务端的处理逻辑,优化其性能,减少处理时间。
    3. 并发量过大:如果你的应用程序在短时间内发起了大量的请求,可能会使得目标服务器承受过大的压力,从而导致响应延迟或失败。可以考虑使用流量控制或者限流机制来限制并发请求的数量。
    4. RestTemplate配置问题:你可能需要检查你的RestTemplate配置是否正确,特别是关于连接超时和读取超时的设置。你可能需要增加这些超时时间以适应网络延迟或服务器处理时间。以下是一个设置超时时间的例子:
    RestTemplate restTemplate = new RestTemplate();
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setConnectTimeout(timeout); // 设置连接超时时间
    factory.setReadTimeout(readTimeout); // 设置读取超时时间
    restTemplate.setRequestFactory(factory);
    

    这里的timeoutreadTimeout应该设置为适合你的应用程序的值。

    请尝试以上建议,看看是否能解决你的问题。如果问题仍然存在,你可能需要进一步调查目标服务器的性能和网络状况。

    评论

报告相同问题?

问题事件

  • 修改了问题 9月27日
  • 创建了问题 9月27日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?