java - java.net.http.HttpClient 中的超时未按预期工作
问题描述
连接到 API 时,具有 100 毫秒超时的 Java Http 客户端会引发超时异常。
我已经验证 api 在 10 毫秒内通过 curl 调用做出响应。
curl --max-time 0.01 http://localhost:8000/
@Test
public void testHTTPClient() throws URISyntaxException, IOException, InterruptedException {
HttpClient client = HttpClient.newBuilder().build().newHttpClient();
java.net.URI uri = new URI("http://localhost:8000/");
HttpRequest req = HttpRequest.newBuilder(uri).GET().timeout(Duration.ofMillis(100)).build();
long start = Instant.now().toEpochMilli();
try {
java.net.http.HttpResponse<String> response = client.send(req, java.net.http.HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
} catch (HttpTimeoutException e) {
System.out.println("Time taken " + (Instant.now().toEpochMilli() - start));
e.printStackTrace();
}
}
我期待输出打印到屏幕上。但我得到以下异常。
Time taken 159
java.net.http.HttpTimeoutException: request timed out
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:559)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)
当我以 100 毫秒超时多次运行测试时。很少有实例有成功的响应。对于像 150 毫秒这样的较大超时,我没有遇到超时异常。
解决方案
推荐阅读
- reactjs - url 改变但组件没有改变
- rust - 当代码不是时,Rust 编译器抱怨在循环中使用移动值
- python - 将 3D 曲线排序为逻辑分组。Python 理想
- angular - 实现 css 如何检查 Carousel 的破坏功能是否正在执行它的假设?
- android - Android:在 Fragment 下添加 RecyclerView
- python - 我的代码是否因为我没有设置头节点的值而崩溃?
- python - 检索动态网页内容 PyQt5
- java - 通过 Java 套接字发送对象
- c# - 如何存储一个值并使其在带有或不带有 HttpContext 的“请求”中可用?
- java - 如何使用 Criteria Builder 使用多个根进行选择查询