我正在使用Jersey客户端实现一个Restful客户端,如下所示:

ClientConfig clientConfig = new ClientConfig();
clientConfig.property(ClientProperties.CONNECT_TIMEOUT, 60000);
clientConfig.property(ClientProperties.READ_TIMEOUT, 60000);
Client client = ClientBuilder.newClient(clientConfig);


只要请求时间超过定义的值,该代码就可以正常工作,并正确抛出超时异常。但是,当我决定切换使用ApacheConnector时,如下所示:

ClientConfig clientConfig = new ClientConfig();
clientConfig.register(JacksonFeature.class);
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, connectionManager);
ApacheConnectorProvider provider = new ApacheConnectorProvider();
clientConfig.connectorProvider(provider);
clientConfig.property(ClientProperties.CONNECT_TIMEOUT, 60000);
clientConfig.property(ClientProperties.READ_TIMEOUT, 60000);
Client client = ClientBuilder.newClient(clientConfig);


超时似乎不再起作用,因此,当服务器无法响应时,我的客户端将一直等到永远,而不会引发超时异常。

有没有人以前遇到过这个问题,或者对我在这里做错了什么有任何线索?
谢谢

最佳答案

尝试创建并注册一个org.apache.http.client.config.RequestConfig

clientConfig.property(ApacheClientProperties.REQUEST_CONFIG, RequestConfig.custom()
  .setConnectTimeout(60000)
  .setSocketTimeout(60000)
  .build());

09-19 23:27