Camelを使用してHTTPSサーバーに非常に速い速度(> 1500 /秒)でサーバーへの接続を1つだけ使用してPOSTメッセージを送信できます。KeepAliveでCamel HTTP4を最適化する
私はkeepAliveをtrueに設定しようとしましたが、それでもスピードの向上は見られません。
5つのメッセージを送信中にtcpdumpを実行し、wiresharkで5つのSYN/ACKパケットを検出しました。 各POSTでSSL証明書が送信されている可能性があります。 (tcpdumpでキャプチャされた102パケットですが、送信するのは5つの "HelloWorld"文字列です)
私は物事をスピードアップする方法はありますか?これは私が使用したコードです:
CamelContext context = new DefaultCamelContext();
final HttpComponent http = (HttpComponent) context.getComponent("https4");
http.setConnectionsPerRoute(1);
http.setMaxTotalConnections(1);
HttpConfiguration httpConfiguration = new HttpConfiguration();
http.setHttpConfiguration(httpConfiguration);;
context.addComponent("fcpHttpComponent", http);
template = context.createProducerTemplate();
headers.put(Exchange.CONTENT_TYPE, "application/json");
headers.put(Exchange.HTTP_METHOD, HttpMethods.POST);
final String endpoint = "https://xxx.xxx.xxx.xxx:443";
try {
httpEndpoint = new HttpEndpoint(endpoint, http, new URI(endpoint));
httpEndpoint.configureProperties(headers);
PoolingHttpClientConnectionManager clientConnectionManager = new PoolingHttpClientConnectionManager();
SocketConfig socketConfig = SocketConfig.custom()
.setSoKeepAlive(true)
.setSoReuseAddress(true)
.setTcpNoDelay(true)
.setSndBufSize(10)
.build();
clientConnectionManager.setDefaultSocketConfig(socketConfig);
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.setMaxConnPerRoute(1);
clientBuilder.setConnectionManager(clientConnectionManager);
clientBuilder.build();
ConnectionKeepAliveStrategy keepAliveStrategy = new DefaultConnectionKeepAliveStrategy();
clientBuilder.setKeepAliveStrategy(keepAliveStrategy);
httpEndpoint.setClientBuilder(clientBuilder);
httpEndpoint.setClientConnectionManager(clientConnectionManager);
template.start();
context.start();
} catch (final Exception e) {
LOG.error("Exception while starting Camel context ", e);
}
//Call this method 5 times
template.asyncRequestBodyAndHeaders(httpEndpoint, message, headers);
SSL証明書の詳細はJVM引数として与えられています。私はPOSTデータを取得することができますが、スピードは私が改善する必要があるものです。
[更新]私はサーバーとしてApache Tomcat 8を使用しています。 は、server.xmlに次のように設定します。
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/x/store.jks" keystorePass="y"
clientAuth="false" sslProtocol="TLS" maxKeepAliveRequests="-1" keepAliveTimeout="-1" />
は、私も自分のサーバー上で設定する必要が何か他のものはありますか?