我实现了一个自定义的 CloseableHttpClient,如下所示:
private WebServiceMessageSender createWebServiceMessageSender() {
HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender();
RequestConfig config = RequestConfig.custom()
.setSocketTimeout(30_000)
.setConnectTimeout(30_000)
.setConnectionRequestTimeout(30_000)
.build();
SocketConfig socketConfig = SocketConfig.custom()
.setSoTimeout(4000)
.build();
CloseableHttpClient httpClient = HttpClientBuilder.create()
.addInterceptorFirst(new HttpComponentsMessageSender.RemoveSoapHeadersInterceptor())
.setDefaultRequestConfig(config)
.setDefaultSocketConfig(socketConfig)
.disableAutomaticRetries()
.build();
httpComponentsMessageSender.setHttpClient(httpClient);
return httpComponentsMessageSender;
}
我将此方法作为 setMessageSender 注入 WebServiceTemplate。
问题是10秒后接收连接超时(不是读取超时!),不是我上面配置的(4000毫秒)。不知道为什么这个webservice在指定的时间没有执行超时,而是等了10秒。有没有人有类似的问题?
依赖项:
Spring-Boot:2.7.x
spring-ws-core:3.1.3
http客户端:4.5.13
我正在 81 端口上调用 google.com
10s 连接超时是 Istio MeshConfig 中的默认值 connectTimeout 值 https://istio.io/v1.12/docs/reference/config/istio.mesh.v1alpha1/