[英]Instrument Jetty HttpClient for Http2
我使用Jetty的http2client對我的服務器進行同步調用,我的示例程序如下,
客戶端部分
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中獲取這些數據。 啟用jetty的調試日志是不可行的,因為它會寫入數據GB。
有沒有辦法通過某些util或java反射來獲取這些指標?
提前致謝
http2Client.setMaxConcurrentPushedStreams(1000);
這太大了,服務器不太可能推送1000個並發流。
http2Client.setConnectTimeout(30);
http2Client.setIdleTimeout(5);
超時以毫秒為單位,因此這些值太小。 我還建議空閑超時大於5000毫秒,類似20000-30000通常更好。
String res = new String(response.getContent());
這是錯誤的,因為您沒有考慮響應字符集。 請改用response.getContentAsString()
。
對於度量標准,您可以使用JMX並使用JMX控制台(或通過標准JMX API)提取許多度量標准。 要為HttpClient
設置JMX,您可以這樣做:
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
MBeanContainer mbeanContainer = new MBeanContainer(mbeanServer);
httpClient.addBean(mbeanContainer);
上面的代碼將HttpClient
組件導出到JMX,在那里您可以查詢各種組件以獲取您感興趣的度量標准。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.