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

Apache Http客户端超时问题

夏建木
2023-03-14

我有这部分代码:

         RequestConfig requestConfig = RequestConfig.custom()
                        .setConnectTimeout(30 * 1000)
                        .setSocketTimeout(30 * 1000)
                        .setConnectionRequestTimeout(30 * 1000)
                        .build();

         BotSynch.httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();

         httpClient.execute(post);
private static CloseableHttpClient httpClient;

有时可能需要10分钟才能收到服务器对请求的答复,这实际上是我试图通过上面的超时设置来防止的。

我在这里遗漏了什么,或者在这个设置旁边应该处理什么?

共有1个答案

百里智勇
2023-03-14

如果预期的行为是HttpClient#execute调用的时间永远不会超过30秒,无论执行结果如何,您都应该考虑在后台线程方法中使用HttpuriRequest#abort方法,该方法可以在指定的间隔之后中止请求

    final HttpGet request = new HttpGet();
    ScheduledExecutorService executorService = ...
    executorService.schedule(request::abort, (long)30, TimeUnit.SECONDS);
    HttpResponse response = httpClient.execute(request);

我们(包括我自己)永远不要忘记这不是sockettimeout所做的事情。

 类似资料:
  • 我读了很多文章来寻找java应用程序的最佳Rest客户机,最后我发现将Jersey与ApacheHTTP客户机4.5结合使用非常好,但在很多文章中,我发现现在改型是最好的(我没有提到Volley,因为在我的例子中,我不需要API支持缓存)。 对于java客户机应用程序,改型是否更好。还是对Android来说更好?为什么我以前没有找到这个比较。。它们无法比较? 我可以比较一下它们的性能、连接池、它们

  • 我正在使用Apache HTTP客户端联系外部服务。这项服务可能需要几个小时(如果不是更长的话)才能产生响应。我尝试了一些不同的方法,但要么以套接字结束,要么以读取超时结束。我刚刚尝试使用RequestConfig将套接字和连接超时设置为0,根据文档,这应该是无限的,但请求总是在1小时后返回。有什么想法吗?

  • 问题内容: 我在ElastiCache上运行Redis集群。 多个进程连接到Redis集群。每个进程都位于Docker容器中。流程不尽相同-我有一个流程,一个流程等。 正常运行几天后,连接到Redis时,我的某些进程开始超时。当我进入受影响的容器并尝试通过到达群集时,与群集的连接超时。这告诉我,问题不仅影响过程,而且影响整个容器。 当我从任何其他容器中使用时,连接都不会出现问题。 我的进程会根据需

  • 问题内容: 如何在Go HTTP客户端中使空闲超时? 空闲超时意味着从HTTP客户端内部调用Conn接口的Read / Write方法时发生超时。当客户端下载文件并且由于读取超时而导致下载失败时,此功能很有用。 问题答案: 您需要创建自己的,并返回,以设置适当的读写期限。 该会是这个样子:

  • 在我们的Spring应用程序中,我们依赖外部系统。我们希望为该系统的请求设置超时,但无法确定如何配置。 我们使用这个: 我已经尝试过这个:如何使用泽西2. x设置连接和读取超时?和许多其他建议,但无法让它工作。任何建议都将不胜感激。 不工作的更新: 也

  • 我对Spring集成的设想是: 使用自定义协议(大小和内容)发送数据的十个生产者 我必须解码这个自定义协议,然后处理结果。 所以我尝试了很多配置,目前最好的配置如下: 序列化类为: 我使用此代码来测试服务器: 当我用一个线程执行此操作时,如果我尝试执行多个线程,则效果很好,如: spring集成服务器卡住了,我有以下警告: 而且它不工作,服务器无法接收消息。 我错在哪里?非常感谢。 编辑 我这样修