1

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で確認したところ、サーバーに問題はありませんでした。また、すべてのリクエストが完了した後でもコードは停止しません。

スレッドがスリープ状態になる代わりに、すべての応答が受信された後にコードを終了させる方法は?

どんな助けでも大歓迎です:)

4

1 に答える 1