스프링 mvc 3.2.2에서 apache http 클라이언트를 사용하여 그림과 같이 get get requests를 동 기적으로 보냅니다.병렬 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";
}
아, 아주 멋진! 나는 이것을 시험 운전에 줄 것이다. 고마워! 그러나 내가 가지고있는 한 가지 질문은 반복 루프에서 어떤 응답인지 어떻게 알 수 있습니까? 또한, 내 컨트롤러가 doWorkwithMultipleDataReturned() 메소드에 결과를 전달할 때 무국적 상태를 유지한다는 것은 무엇을 의미합니까? – JaJ
샘플 코드를 사용하면 원래 요청 (URL)을 GetRequestTask 추상화를 통해 응답과 대조 할 수 있습니다. 그래서''PUT YOUR CODE HERE' 줄에 이미 두 문자열을 모두 가지고 있습니다. 당신의 방법'doWorkwithMultipleDataReturned' 당신이 당신의 컨트롤러 상태 (여러 스레드에서 동일한 인스턴스의 제한 사용)을 만드는 컨트롤러의 인스턴스 변수에 응답을 보유 수있는 인수를 사용하지 않았기 때문에 상태 비 주석에 대해 , 나는 가정했다 . 오히려, 문제를 피하기 위해 메소드 변수로만 응답에 대한 참조를 유지해야합니다. – superEb
좋은 점! 정보에 다시 한번 감사드립니다! – JaJ