HTTP-пул подключений отключается при перезапуске Camel контекста - PullRequest
0 голосов
/ 05 сентября 2018

Я определил весь верблюжий контекст с маршрутами, используя компонент camel-http4 . По сути, после запуска контекста этот маршрут выдает каждые 5 минут запрос http на внешний сервер. Это работает просто отлично.

В какой-то момент я хочу перезапустить контекст верблюда (используя JMX), поэтому я просто делаю:

if (camelContext.getStatus().isStoppable()) {
  camelContext.stop();
}

и позже:

if (camelContext.getStatus().isStarttable()) {
  camelContext.start();
}

Обе операции кажутся успешными, журналы подтверждают фактическую остановку и запуск. Но при первом запросе http я получаю следующую ошибку:

java.lang.IllegalStateException: Connection pool shut down

  at org.apache.http.util.Asserts.check(Asserts.java:34)[org.apache.httpcomponents:httpcore-nio:4.4.4 org.apache.httpcomponents:httpcore-osgi:4.4.4 org.apache.httpcomponents:httpcore:4.4.4]
  at org.apache.http.pool.AbstractConnPool.lease(AbstractConnPool.java:184)[org.apache.httpcomponents:httpcore-nio:4.4.4 org.apache.httpcomponents:httpcore-osgi:4.4.4 org.apache.httpcomponents:httpcore:4.4.4]
  at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.requestConnection(PoolingHttpClientConnectionManager.java:251)[commons-codec:commons-codec:1.9 org.apache.httpcomponents:fluent-hc:4.5.2 org.apache.httpcomponents:httpclient-cache:4.5.2 org.apache.httpcomponents:httpclient-osgi:4.5.2 org.apache.httpcomponents:httpclient:4.5.2 org.apache.httpcomponents:httpmime:4.5.2]
  at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:175)[commons-codec:commons-codec:1.9 org.apache.httpcomponents:fluent-hc:4.5.2 org.apache.httpcomponents:httpclient-cache:4.5.2 org.apache.httpcomponents:httpclient-osgi:4.5.2 org.apache.httpcomponents:httpclient:4.5.2 org.apache.httpcomponents:httpmime:4.5.2]

Похоже, что пул соединений находится в недопустимом состоянии. Как я могу форсировать пул при создании контекста? Есть ли другой способ избежать этой ошибки?

Версии: верблюд-http4 2.17 apache httpclient 4.5.2


Я уже видел несколько сообщений, в которых говорится, что диспетчер соединений должен использоваться совместно (это скорее обходной путь) HttpClientConfigurer. Я определяю и внедряю свой собственный клиентский конфигуратор, он не работает:

public class MyHttpClientConfigurer implements HttpClientConfigurer {

    @Override
    public void configureHttpClient(HttpClientBuilder httpClientBuilder) {
        httpClientBuilder.setConnectionManagerShared(true);
    }
}

1 Ответ

0 голосов
/ 05 сентября 2018

Прочтите javadoc этих методов на CamelContext, чтобы получить подробности.

Вместо остановки верблюжьего контекста вы должны использовать приостановку и возобновить ее.

...