簡體   English   中英

用於Http2的Instrument Jetty HttpClient

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM