Java net HttpClient:在异步调用中响应超时
我的目标是在HttpClient的异步调用中响应超时。我找到了许多关于如何设置不同超时的信息,但没有找到任何关于如何在超时发生时作出反应的信息 文件规定: 如果在指定的超时内未收到响应,则会从HttpClient::send或HttpClient::sendAsync引发HttpTimeoutException,并以HttpTimeoutException异常完成 但我不知道确切地说是什么意思 例子 在同步调用中,我可以执行以下操作(如果测试URL后面的服务器没有应答): 我现在想对异步调用做同样的反应,如:Java net HttpClient:在异步调用中响应超时,java,timeout,java-http-client,Java,Timeout,Java Http Client,我的目标是在HttpClient的异步调用中响应超时。我找到了许多关于如何设置不同超时的信息,但没有找到任何关于如何在超时发生时作出反应的信息 文件规定: 如果在指定的超时内未收到响应,则会从HttpClient::send或HttpClient::sendAsync引发HttpTimeoutException,并以HttpTimeoutException异常完成 但我不知道确切地说是什么意思 例子 在同步调用中,我可以执行以下操作(如果测试URL后面的服务器没有应答): 我现在想对异步调用做同
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("http://localhost:8080/api/ping/public"))
.timeout(Duration.ofSeconds(2))
.build();
HttpClient client = HttpClient.newBuilder().build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream()).thenIfTimeout(System.out.println());
最后一个调用只是对超时的反应的占位符,不存在。但是如何存档此文件?根据您尝试执行的操作,在发生异常时,您至少可以使用三种方法来执行操作:
- 允许您在发生异常时返回相同类型的结果
- 允许您触发某些操作,但不会更改完成 结果或例外
- 允许您触发某些操作,并更改完成的类型 结果或例外
client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream())
.whenComplete((r,x) -> {
if (x instanceof HttpTimeoutException) {
// do something
}
});
“我不知道exacly”是什么意思:它的意思是抛出一个异常,正如你部分引用的句子所明确指出的那样。
client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream())
.whenComplete((r,x) -> {
if (x instanceof HttpTimeoutException) {
// do something
}
});