четверг, 20 мая 2010 г.

Axis2 - improving HTTP transport

Вот уж не знал. Аксис, оказывается, открывает всего 2 соединения для своего НТТР клиента.
А это значит, что по умолчанию лишь 2 пользователя смогут одновременно делать запрос.
Но решение вроде есть:

http://amilachinthaka.blogspot.com/2010/01/improving-axis2-http-transport-client.html


ConfigurationContext configurationContext =
ConfigurationContextFactory.createConfigurationContextFromFileSystem(
AXIS2_REPOSITORY_LOCATION, AXIS2_CLIENT_CONFIG_FILE);
MultiThreadedHttpConnectionManager multiThreadedHttpConnectionManager = new MultiThreadedHttpConnectionManager();

HttpConnectionManagerParams params = new HttpConnectionManagerParams();
params.setDefaultMaxConnectionsPerHost(20);
multiThreadedHttpConnectionManager.setParams(params);
HttpClient httpClient = new HttpClient(multiThreadedHttpConnectionManager);
configurationContext.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);


Update 21/05/2010
У меня это решение не работало. Подсмотрел другое решение, и оно работает.
В двух словах, updateStub надо вызвать всего один раз (в принципе, это проверяется в самом методе), чтобы изменить настройки.



private static Boolean bConfed = false;


protected static void updateStub(org.apache.axis2.client.Stub stub)
{
synchronized (bConfed)
{
if (bConfed) return;
int maxTotal = 15;
int maxPerHost = 5;

MultiThreadedHttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams params = httpConnectionManager.getParams();
if (params == null)
{
params = new HttpConnectionManagerParams();
httpConnectionManager.setParams(params);
}

params.setMaxTotalConnections(maxTotal);
params.setDefaultMaxConnectionsPerHost(maxPerHost);
HttpClient httpClient = new HttpClient(httpConnectionManager);
ConfigurationContext context = stub._getServiceClient().getServiceContext().getConfigurationContext();
context.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
log.info("Axjs Http Client Conf is changed, max conn.={}, max per host = {}", maxTotal, maxPerHost);
bConfed = true;
}
}

Комментариев нет:

Отправить комментарий