Spring cloud Zuul连接池大小

Spring cloud Zuul连接池大小,spring-cloud,netflix-zuul,Spring Cloud,Netflix Zuul,我对单独使用Zuul而不使用Ribbon或其他Netflix组件时配置连接池的大小有疑问 我们有一个系统,它使用Zuul将请求代理到Mule服务器。我们只使用Zuul而不是Ribbon。我们定义了4条称为Mule服务的路线。其中一项服务运行时间很长,可能每次通话约3秒 当我们同时加载40个用户的系统时,我们会得到这个错误 org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from

我对单独使用Zuul而不使用Ribbon或其他Netflix组件时配置连接池的大小有疑问

我们有一个系统,它使用Zuul将请求代理到Mule服务器。我们只使用Zuul而不是Ribbon。我们定义了4条称为Mule服务的路线。其中一项服务运行时间很长,可能每次通话约3秒

当我们同时加载40个用户的系统时,我们会得到这个错误

org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:412)
    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:298)
    at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:238)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:423)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:115)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
    at org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter.forwardRequest(SimpleHostRoutingFilter.java:262)
    at org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter.forward(SimpleHostRoutingFilter.java:225)
    at org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter.run(SimpleHostRoutingFilter.java:177)
    at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:112)
当我查看代码以了解如何更改连接池的大小时,发现了以下代码

private static ClientConnectionManager newConnectionManager() throws Exception {
    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
    trustStore.load(null, null);
    SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
    sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    registry.register(new Scheme("https", sf, 443));
    ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(registry);
    cm.setMaxTotal(Integer.parseInt(System.getProperty("zuul.max.host.connections", "200")));
    cm.setDefaultMaxPerRoute(Integer.parseInt(System.getProperty("zuul.max.host.connections", "20")));
    return cm;
}
起初,我认为我所要做的就是增加zuul.max.host.connections的值,这将增加每个路由最大值的大小,但后来我注意到,相同的系统属性用于设置最大总连接数


设置此系统参数的值是否是控制池大小的正确方法?或者我们应该使用另一个组件(如Ribbon)来更好地管理这些连接?

如果您仍在寻找解决方案,我采用以下方法

1-通过传递禁用(SimpleHostRoutingFilter) (-Dzuul.SimpleHostRoutingFilter.route.disable=true)作为系统属性

2-编写您自己的自定义路由筛选器(在我的例子中是复制的)(SimpleHostRoutingFilter),并进行一些修改,以便能够设置这些属性。

您可以配置

zuul.host.maxTotalConnections=1000
zuul.host.maxPerRouteConnections=100

如果设置
-dzuul.max.host.connections
有效,我会同意。@stephen inzer您能找到解决此问题的方法吗?