Инструмент Jetty HttpClient для Http2 - PullRequest
0 голосов
/ 19 июня 2019

Я использую http2client от Jetty для синхронных звонков на мой сервер, мой пример программы следующий:

Клиентская часть

Security.addProvider(new OpenSSLProvider());
SslContextFactory sslContextFactory = new SslContextFactory(true);
sslContextFactory.setProvider("Conscrypt");
sslContextFactory.setProtocol("TLSv1.3");
HTTP2Client http2Client = new HTTP2Client();
http2Client.setConnectTimeout(5000);
http2Client.setIdleTimeout(5000);

HttpClient httpClient = new org.eclipse.jetty.client.HttpClient(new HttpClientTransportOverHTTP2(http2Client), sslContextFactory);
httpClient.setMaxConnectionsPerDestination(20);
httpClient.setMaxRequestsQueuedPerDestination(100);
httpClient.setConnectTimeout(5000);
httpClient.addBean(sslContextFactory);
httpClient.start();

Запрос части

Request request = httpClient.POST("my url goes here");
request.header(HttpHeader.CONTENT_TYPE, "application/json");
request.content(new StringContentProvider("xmlRequest PayLoad goes here","utf-8"));
ContentResponse response = request.send();
String res = new String(response.getContent());

Мне нужно инструмент, чтобы получить такие показатели, как количество соединений на пункт назначения, количество запросов на соединения, количество неудачных транзакций и т. Д.

Мое приложение запускается на сервере, где использование wireshark или любого другого инструмента tcp ограничено,поэтому мне нужно получить эти данные в Java.Включение отладочных журналов причала нежизнеспособно, так как записывает ГБ данных.

Есть ли способ получить эти метрики с помощью некоторого утилиты или с помощью Java-отражения?

Заранее спасибо

1 Ответ

0 голосов
/ 20 июня 2019

http2Client.setMaxConcurrentPushedStreams (1000);

Это слишком велико, вряд ли сервер будет выдавать 1000 одновременных потоков.

http2Client.setConnectTimeout (30);

http2Client.setIdleTimeout (5);

Время ожидания измеряется в миллисекундах, поэтому эти значения слишком малы. Я также рекомендую, чтобы время простоя было больше, чем 5000 миллисекунд, обычно лучше 20000-30000.

String res = new String (response.getContent ());

Это неправильно, поскольку вы не учитываете кодировку ответа. Используйте вместо response.getContentAsString().

Что касается метрик, вы можете использовать JMX и извлекать ряд метрик с помощью консоли JMX (или через стандартные API-интерфейсы JMX). Чтобы настроить JMX для HttpClient, вы можете сделать это:

MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
MBeanContainer mbeanContainer = new MBeanContainer(mbeanServer);
httpClient.addBean(mbeanContainer);

Приведенный выше код экспортирует компоненты HttpClient в JMX, и там вы можете запросить различные компоненты для интересующих вас показателей.

...