摘自关于Baeldung的优秀文章,这里有几个细节:
>
连接超时:
connect timeout定义了一个时间段,客户端应在该时间段内与目标主机建立连接。默认情况下,对于OKHttpClient
,此超时设置为10秒。
@Test
public void whenConnectTimeoutExceeded_thenSocketTimeoutException() {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.MILLISECONDS)
.build();
Request request = new Request.Builder()
.url("http://203.0.113.1") // non routable address
.build();
Throwable thrown = catchThrowable(() -> client.newCall(request).execute());
assertThat(thrown).isInstanceOf(SocketTimeoutException.class);
}
我们来看一个实用的使用示例:
@Test
public void whenCallTimeoutExceeded_thenInterruptedIOException() {
OkHttpClient client = new OkHttpClient.Builder()
.callTimeout(1, TimeUnit.SECONDS)
.build();
Request request = new Request.Builder()
.url("https://httpbin.org/delay/2")
.build();
Throwable thrown = catchThrowable(() -> client.newCall(request).execute());
assertThat(thrown).isInstanceOf(InterruptedIOException.class);
}
读取超时:
从客户端和目标主机之间的连接成功建立起,就会应用读取超时。
它定义了两个数据包之间等待服务器响应时的最长不活动时间。
可以使用OKHttpClient.Builder#ReadTimeout
更改默认的10秒超时。与连接超时类似,零值表示没有超时。
现在让我们看看如何在实践中配置自定义读取超时:
@Test
public void whenReadTimeoutExceeded_thenSocketTimeoutException() {
OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(10, TimeUnit.MILLISECONDS)
.build();
Request request = new Request.Builder()
.url("https://httpbin.org/delay/2") // 2-second response time
.build();
Throwable thrown = catchThrowable(() -> client.newCall(request).execute());
assertThat(thrown).isInstanceOf(SocketTimeoutException.class);
}
在下面的示例中,我们设置了10 ms的非常短的写入超时,并将1 MB的内容发布到服务器:
@Test
public void whenWriteTimeoutExceeded_thenSocketTimeoutException() {
OkHttpClient client = new OkHttpClient.Builder()
.writeTimeout(10, TimeUnit.MILLISECONDS)
.build();
Request request = new Request.Builder()
.url("https://httpbin.org/delay/2")
.post(RequestBody.create(MediaType.parse("text/plain"), create1MBString()))
.build();
Throwable thrown = catchThrowable(() -> client.newCall(request).execute());
assertThat(thrown).isInstanceOf(SocketTimeoutException.class);
}
我正在使用Apache HTTP客户端联系外部服务。这项服务可能需要几个小时(如果不是更长的话)才能产生响应。我尝试了一些不同的方法,但要么以套接字结束,要么以读取超时结束。我刚刚尝试使用RequestConfig将套接字和连接超时设置为0,根据文档,这应该是无限的,但请求总是在1小时后返回。有什么想法吗?
我有这部分代码: 有时可能需要10分钟才能收到服务器对请求的答复,这实际上是我试图通过上面的超时设置来防止的。 我在这里遗漏了什么,或者在这个设置旁边应该处理什么?
我们已经定义了Lettuce客户端连接工厂,以便能够连接到定义自定义套接字和命令超时的Redis: 莴苣文档定义默认值: 默认套接字超时为10秒 默认命令超时为60秒 如果Redis服务中断,应用程序必须在300ms内接收超时。哪个值必须定义为最大值? Github示例项目:https://github.com/cristianprofile/spring-data-redis-lettuce
问题内容: 我在ElastiCache上运行Redis集群。 多个进程连接到Redis集群。每个进程都位于Docker容器中。流程不尽相同-我有一个流程,一个流程等。 正常运行几天后,连接到Redis时,我的某些进程开始超时。当我进入受影响的容器并尝试通过到达群集时,与群集的连接超时。这告诉我,问题不仅影响过程,而且影响整个容器。 当我从任何其他容器中使用时,连接都不会出现问题。 我的进程会根据需
在我的Spring Boot应用程序中,Hystrix与Feign一起工作。 我在使用: 如有任何帮助,不胜感激,谢谢!
问题内容: 如何在Go HTTP客户端中使空闲超时? 空闲超时意味着从HTTP客户端内部调用Conn接口的Read / Write方法时发生超时。当客户端下载文件并且由于读取超时而导致下载失败时,此功能很有用。 问题答案: 您需要创建自己的,并返回,以设置适当的读写期限。 该会是这个样子: