2015-09-22 4 views
1

У меня возник вопрос о настройке размера пула соединений при использовании Zuul сам по себе, а не использовании ленты или других компонентов Netflix.Размер пула подключения Zuul

У нас есть система, которая использует 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, и это увеличит размер max max, но потом я заметил, что одно и то же системное свойство используется для установки общего максимальное количество подключений.

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

+0

Если установка '-dzuul.max.host.connections' работы, я бы с этим. – spencergibb

+0

@ stephen-inzer вы смогли найти решение по этой проблеме? – agpt

ответ

1

Если вы все еще ищете решение, я принял следующий подход.

1- Отключить (SimpleHostRoutingFilter), передав (-Dzuul.SimpleHostRoutingFilter.route.disable = true) в качестве системного свойства.

2- Напишите свой собственный настраиваемый фильтр маршрутизации, в моем случае я скопировал (SimpleHostRoutingFilter) и внесем некоторые изменения, чтобы иметь возможность устанавливать эти свойства.

0

вы можете сконфигурировать

zuul.host.maxTotalConnections=1000 
zuul.host.maxPerRouteConnections=100 
Смежные вопросы