Конечная точка не подключена в httpclient5-beta - PullRequest
0 голосов
/ 17 мая 2018

Привет! Я пытаюсь использовать httpcomponents5 beta, чтобы установить постоянное соединение. Я попробовал пример, приведенный на их сайте, код выглядит следующим образом:

final IOReactorConfig ioReactorConfig = IOReactorConfig.custom().setSoTimeout(Timeout.ofSeconds(45)).setSelectInterval(10000).setSoReuseAddress(true).setSoKeepAlive(true).build();
final SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(new TrustAllStrategy()).build();
final PoolingAsyncClientConnectionManager connectionManager = PoolingAsyncClientConnectionManagerBuilder.create().setConnectionTimeToLive(TimeValue.of(1, TimeUnit.DAYS)).setTlsStrategy(new H2TlsStrategy(sslContext, NoopHostnameVerifier.INSTANCE)).build();
client = HttpAsyncClients.createMinimal(protocol, H2Config.DEFAULT, null, ioReactorConfig, connectionManager);
client.start();
final org.apache.hc.core5.http.HttpHost target = new org.apache.hc.core5.http.HttpHost("localhost", 8000, "https");
Future<AsyncClientEndpoint> leaseFuture = client.lease(target, null);
AsyncClientEndpoint asyncClientEndpoint = leaseFuture.get(60, TimeUnit.SECONDS);
final CountDownLatch latch = new CountDownLatch(1);
final AsyncRequestProducer requestProducer = AsyncRequestBuilder.post(target.getSchemeName()+"://"+target.getHostName()+":"+target.getPort()+locationposturl).addParameter(new BasicNameValuePair("info", requestData)).setEntity(new StringAsyncEntityProducer("json post data will go here", ContentType.APPLICATION_JSON)).setHeader("Pragma", "no-cache").setHeader("from", "http5").setHeader("Custom", customheaderName).setHeader("Secure", secureHeader).build();
locEndPoint.execute(requestProducer, SimpleResponseConsumer.create(), new FutureCallback<SimpleHttpResponse>() {
    @Override
    public void completed(final SimpleHttpResponse response) {
        if (response != null) {
            if (response.getCode() > -1) {
                try {

                    System.out.println("http5:: COMPLETED : RESPONSE "+response.getBodyText());
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        latch.countDown();
    }

    @Override
    public void failed(final Exception ex) {
        System.out.println("http5:: FAILED : "+target+locationposturl);
        LoggerUtil.printStackTrace(ex);
        System.out.println("http5::Exception Request failed "+LoggerUtil.getStackTrace(ex));
        latch.countDown();
    }

    @Override
    public void cancelled() {
        System.out.println("http5:: CANCELLED : "+target+locationposturl);
        System.out.println(http5::Exception Request cancelled");
        latch.countDown();
    }
});
latch.await();

Этот код работает без проблем в первый раз, но когда я отправляю последующие запросы, он выдает исключение следующим образом:

http5 :: Возникло исключение java.lang.IllegalStateException: конечная точка не подключен в org.apache.hc.core5.util.Asserts.check (Asserts.java:38) в org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager $ InternalConnectionEndpoint.getValidatedPoolEntry (PoolingAsyncClientConnectionManager.java:497) в org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager $ InternalConnectionEndpoint.execute (PoolingAsyncClientConnectionManager.java:552) в org.apache.hc.client5.http.impl.async.MinimalHttpAsyncClient $ InternalAsyncClientEndpoint.execute (MinimalHttpAsyncClient.java:405) в org.apache.hc.core5.http.nio.AsyncClientEndpoint.execute (AsyncClientEndpoint.java:81) в org.apache.hc.core5.http.nio.AsyncClientEndpoint.execute (AsyncClientEndpoint.java:114)

В чем может быть проблема с конечной точкой, я заставляю конечную точку оставаться в живых в течение дня, любезно пролить свет на это

...