3

Zuul を単独で使用し、Ribbon やその他の Netflix コンポーネントを使用しない場合の接続プールのサイズの構成について質問があります。

Zuul を使用して要求を Mule サーバーにプロキシするシステムがあります。リボンではなく Zuul のみを使用しています。Mule サービスを呼び出す 4 つのルートを定義しました。これらのサービスの 1 つは実行時間が長く、おそらく呼び出しごとに約 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 の値を増やすだけで、ルートごとの最大サイズが増えると思っていましたが、同じシステム プロパティを使用してルートの合計最大数を設定していることに気付きました。接続。

このシステム・パラメーターの値を設定することは、プール・サイズを制御する正しい方法ですか? それとも、これらの接続をより適切に管理するために、リボンなどの別のコンポーネントを使用する必要がありますか?

4

2 に答える 2

3

あなたは設定することができます

zuul.host.maxTotalConnections=1000
zuul.host.maxPerRouteConnections=100
于 2016-06-29T06:11:00.960 に答える
1

それでも解決策を探している場合は、次のアプローチを取りました。

1- システム プロパティとして ( -Dzuul.SimpleHostRoutingFilter.route.disable=true ) を渡すことにより ( SimpleHostRoutingFilter ) を無効にします。

2- 独自のカスタマイズされたルーティング フィルターを作成します。私の場合は ( SimpleHostRoutingFilter ) をコピーし、これらのプロパティを設定できるように変更を加えます。

于 2016-02-02T11:01:35.990 に答える