Java 重新启动驼峰上下文时Http连接池关闭

Java 重新启动驼峰上下文时Http连接池关闭,java,apache-camel,spring-camel,Java,Apache Camel,Spring Camel,我已经使用组件定义了一个包含路由的完整camel上下文。基本上,在上下文启动时,该路由每5分钟向外部服务器发出一个http请求。这真是太好了 在某个时候,我想使用JMX重新启动camel上下文,因此我只需执行以下操作: if (camelContext.getStatus().isStoppable()) { camelContext.stop(); } 后来: if (camelContext.getStatus().isStarttable()) { camelContext.st

我已经使用组件定义了一个包含路由的完整camel上下文。基本上,在上下文启动时,该路由每5分钟向外部服务器发出一个http请求。这真是太好了

在某个时候,我想使用JMX重新启动camel上下文,因此我只需执行以下操作:

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);
    }
}

阅读CamelContext上这些方法的javadoc以获得详细信息

您不应该停止camel上下文,而应该使用suspend并恢复它