私はspring mvc 3.2.2内でapache httpクライアントを使用して、図示のように5つのget要求を同期的に送信します。パラレルGETリクエストを送信し、結果レスポンスを待つ方法を教えてください。
これらをすべて非同期(パラレル)で送信し、すべてのGET要求から解析されたペイロード文字列を返すために要求が戻るのを待つ方法はありますか。
public String myMVCControllerGETdataMethod()
{
// Send 1st request
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://api/data?type=1");
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
// Send 2st request
HttpClient httpclient2 = new DefaultHttpClient();
HttpGet httpget2 = new HttpGet("http://api/data?type=2");
ResponseHandler2<String> responseHandler2 = new BasicResponseHandler();
String responseBody2 = httpclient.execute(httpget, responseHandler2);
// o o o more gets here
// Perform some work here...and wait for all requests to return
// Parse info out of multiple requests and return
String results = doWorkwithMultipleDataReturned();
model.addAttribute(results, results);
return "index";
}
ああ、とてもクールです!私はこれに試乗をします。どうも!しかし、私が持っている1つの質問は、どのような応答が反復ループにあるのかをどのように知ることができるかです。また、私のコントローラがdoWorkwithMultipleDataReturned()メソッドに結果を渡すステートレス状態を維持することはどういう意味ですか? – JaJ
サンプルコードでは、元のリクエスト(URL)を 'GetRequestTask'抽象化を介してレスポンスと照合することができます。ですから '' PUT YOUR CODE HERE'という行にはすでに両方とも文字列としてあります。 あなたのメソッド 'doWorkwithMultipleDataReturned'は、コントローラのインスタンス変数で応答を保持する引数を取らず、コントローラをステートフルにして(複数のスレッドに渡って同じインスタンスを使用することを制限する)、ステートレスなコメントについては、 。むしろ、その問題を避けるためには、レスポンスへの参照をメソッド変数として保持する必要があります。 – superEb
大きなポイント!情報をもう一度ありがとう! – JaJ