Диспетчер многопоточных соединений с Jersey Apache Client 4

1

У меня есть клиент Джерси и работает, используя библиотеку Apache Client 4, например:

private Client createClient() {
    ApacheHttpClient4Config cc = new DefaultApacheHttpClient4Config();
    // boring stuff here
    return ApacheHttpClient4.create(cc);
}

Но по умолчанию используется BasicClientConnManager, который не позволяет многопоточные подключения.

ApacheHttpClient4Config Javadoc говорит, что мне нужно установить PROPERTY_CONNECTION_MANAGER в экземпляр ThreadSafeClientConnManager если мне нужна многопоточная операция. Я могу это сделать, и он работает нормально:

private Client createClient() {
    ApacheHttpClient4Config cc = new DefaultApacheHttpClient4Config();
    cc.getProperties().put(ApacheHttpClient4Config.PROPERTY_CONNECTION_MANAGER,
        new ThreadSafeClientConnManager());
    // boring stuff here
    return ApacheHttpClient4.create(cc);
}

Но ThreadSafeClientConnManager устарел. Это раздражает.

Более современная версия - PoolingHttpClientConnectionManager. К сожалению, метод ApacheHttpClient4.create() требует, чтобы диспетчер соединений был реализацией ClientConnectionManager (сам устарел), а PoolingHttpClientConnectionManager не реализует этот интерфейс. Поэтому, если я пытаюсь его использовать, мой диспетчер подключений игнорируется, и мы возвращаемся к BasicClientConnManager.

Как я могу создать потокобезопасный клиент, не используя ничего, что устарело?

  • 0
    Вы нашли решение?
Теги:
multithreading
apache-httpclient-4.x
jersey-client

1 ответ

0

Вы можете создать клиент следующим образом (см. Https://github.com/phillbarber/connection-leak-test/blob/master/src/test/java/com/github/phillbarber/connectionleak/IntegrationTestThatExaminesConnectionPoolBeforeAndAfterRun.java#L30-L33):

    client = new ApacheHttpClient4(new ApacheHttpClient4Handler(HttpClients.custom()
            .setConnectionManager(new PoolingHttpClientConnectionManager())
            .build(), null, false));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню