[java] HttpClient를 사용하여 웹 서비스에 비동기적으로 요청을 보내는 방법은?
Java에서 HttpClient를 사용하여 비동기적으로 웹 서비스에 요청을 보내는 방법을 살펴보겠습니다.
- HttpClient 객체 생성하기: 먼저 HttpClient 객체를 생성해야 합니다. HttpClient는 Apache HttpComponents 라이브러리를 사용하여 만들 수 있습니다.
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients;
CloseableHttpAsyncClient httpClient = HttpAsyncClients.createDefault();
httpClient.start();
- 비동기로 요청 보내기: 비동기 요청을 보내기 위해 HttpPost, HttpGet 등의 HTTP 메서드 중 하나를 선택하고 요청 객체를 생성합니다.
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
HttpPost request = new HttpPost("http://example.com/api");
request.setHeader("Content-Type", "application/json");
// 요청 바디 설정
StringEntity requestBody = new StringEntity("{\"name\":\"John\", \"age\":30}");
request.setEntity(requestBody);
- 비동기적으로 응답 처리하기: 요청을 보내고 나면 응답을 비동기적으로 처리해야 합니다.
FutureCallback
인터페이스를 구현하여 응답을 처리할 수 있습니다.
import org.apache.http.HttpResponse;
import org.apache.http.concurrent.FutureCallback;
FutureCallback<HttpResponse> callback = new FutureCallback<HttpResponse>() {
@Override
public void completed(HttpResponse result) {
// 응답 처리 코드
System.out.println("응답 코드: " + result.getStatusLine().getStatusCode());
}
@Override
public void failed(Exception ex) {
// 실패 처리 코드
ex.printStackTrace();
}
@Override
public void cancelled() {
// 요청이 취소되었을 때 처리할 코드
}
};
httpClient.execute(request, callback);
// 요청이 완료될 때까지 대기하기
httpClient.awaitTermination(5, TimeUnit.SECONDS);
// HttpClient 종료하기
httpClient.close();
위 예제는 Apache HttpComponents 라이브러리를 사용하여 비동기적으로 요청을 보내는 방법을 보여주고 있습니다. 이를 통해 웹 서비스에 비동기적으로 요청을 보낼 수 있으며, 응답을 비동기적으로 처리할 수 있습니다.
더 자세한 내용은 Apache HttpComponents Documentation을 참조하시기 바랍니다.