Jetty 9 HttpClient API を使用して、非同期 HttpClient を生成する高負荷を開発しようとしています。POSTリクエストを行うための基本的なコードを書きました
public void connectHttp() throws Exception {
HttpClient client = new HttpClient();
// Configure HttpClient here
client.setMaxConnectionsPerDestination(1000);
try {
client.start();
} catch(Exception e) {
System.out.println("Caught Exception in Client Start : ");
e.printStackTrace();
throw e;
}
try {
for(int i = 0 ; i<1000;i++) {
client.POST("http://localhost:8080/privaterestservice/jersey/privatedata/writedata")
.timeout(3, TimeUnit.SECONDS)
.file(Paths.get("stats_kestrel.txt"),"text/plain").send(new BufferingResponseListener() {
@Override
public void onComplete(Result res) {
System.out.println("Got Response : "+res.isSucceeded());
}
});
}
}
finally {
//client.stop();
}
System.out.println("I am Done!!");
System.out.println(client.getState());
}
サーバーに大量のリクエストを送信する必要があります。しかし、このコードを実行すると、最後のいくつかのリクエストで失敗します。Jmeterで確認したところ、サーバーに問題はありませんでした。また、すべてのリクエストが完了した後でもコードは停止しません。
スレッドがスリープ状態になる代わりに、すべての応答が受信された後にコードを終了させる方法は?
どんな助けでも大歓迎です:)