用于 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 内获取这些数据。启用码头的调试日志是不可行的,因为它会写入 GB 的数据。
有没有办法通过一些实用程序或 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,您可以在其中查询各种组件以获得您感兴趣的指标。
我正在使用 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 内获取这些数据。启用码头的调试日志是不可行的,因为它会写入 GB 的数据。
有没有办法通过一些实用程序或 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,您可以在其中查询各种组件以获得您感兴趣的指标。