有时(随机发生,有时在一个请求之后,有时在 10 个请求之后)我的 Batch-Job 崩溃,并出现以下异常:
javax.ws.rs.ProcessingException: RESTEASY004655: Unable to invoke request: org.apache.http.NoHttpResponseException: host_url failed to respond
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:327)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:443)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:63)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocationBuilder.post(ClientInvocationBuilder.java:227)
异常是由以下代码触发的:
public YpspResponse sendRequest(YpspRequest request) {
return webTarget
.request(MediaType.APPLICATION_XML)
.post(Entity.xml(request))
.readEntity(YpspResponse.class);
}
WebTarget 使用以下代码初始化:
ResteasyClientBuilder builder = new ResteasyClientBuilder()
.socketTimeout(30, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
.connectionPoolSize(500)
.keyStore(keyStore, ynetKeystorePassword.toCharArray())
.trustStore(trustStore);
if (proxyConfiguration.useProxy()){
logger.info("{}", proxyConfiguration.getHost());
builder.defaultProxy(proxyConfiguration.getHost(), proxyConfiguration.getPort());
}
return builder
.build()
.target(ynetUrl)
.register(messageBodyReader)
.register(loggingFilter)
.register((ClientRequestFilter) requestContext -> {
byte[] auth = (username + ":" + password).getBytes("UTF-8");
requestContext.getHeaders().putSingle(HttpHeaders.AUTHORIZATION, "BASIC " + Base64.getEncoder().encodeToString(auth));
requestContext.getHeaders().putSingle("version", "1.1");
});
我正在使用RESTEASY:3.12.1.FINAL
看起来
ResteasyClient
尝试使用已使用的连接而不是新连接。我该如何解决这个问题?
升级至3.15.2版本问题得到解决