【问题标题】:Instrument Jetty HttpClient for Http2用于 Http2 的仪表 Jetty HttpClient
【发布时间】:2021-05-06 20:45:36
【问题描述】:

我正在使用 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 的数据。

有没有办法通过一些 util 或 java 反射来获取这些指标?

提前致谢

【问题讨论】:

    标签: java jetty http2 jetty-9 jetty-httpclient


    【解决方案1】:

    http2Client.setMaxConcurrentPushedStreams(1000);

    这太大了,服务器不太可能推送 1000 个并发流。

    http2Client.setConnectTimeout(30);

    http2Client.setIdleTimeout(5);

    超时以毫秒为单位,因此这些值太小了。 我还建议将空闲超时设置为大于 5000 毫秒的值,通常为 20000-30000 更好。

    字符串 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,您可以在其中查询各种组件以获取您感兴趣的指标。

    【讨论】:

    • 对不起,我之前更新了错误的 sn-p,现在我已经更新了我们使用的确切 sn-p。关于指标,我会尝试你所说的并在这里更新,谢谢
    猜你喜欢
    • 2015-06-06
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2015-09-10
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多