49.6. 클라이언트에서 비동기 처리
49.6.1. 개요
Cryostat-RS 2.0은 클라이언트 측에서 호출의 비동기 처리를 지원합니다. 두 가지 비동기 처리 스타일이 지원됩니다 . java.util.concurrent.Future<V
> 반환 값을 사용하거나 호출 콜백을 등록하는 것입니다.
49.6.2. Future<V> 반환 값을 사용한 비동기 호출
비동기 처리에 Future<V> 방법을 사용하면 다음과 같이 클라이언트 요청을 비동기적으로 호출할 수 있습니다.Using the Future
<V> approach to asynchronous processing, you can invoke a client request asynchronously, as follows:
// Java import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Client; import java.util.concurrent.Future; import javax.ws.rs.core.Response; ... Client client = ClientBuilder.newClient(); Future<Response> futureResp = client.target("http://example.org/bookstore/books/123") .request("application/xml") .async() .get(); ... // At a later time, check (and wait) for the response: Response resp = futureResp.get();
입력된 응답에 유사한 접근 방식을 사용할 수 있습니다. 예를 들어, 유형의 응답을 얻으려면 BookInfo
:
Client client = ClientBuilder.newClient(); Future<BookInfo> futureResp = client.target("http://example.org/bookstore/books/123") .request("application/xml") .async() .get(BookInfo.class); ... // At a later time, check (and wait) for the response: BookInfo resp = futureResp.get();
49.6.3. 호출 콜백을 사용한 비동기 호출
Future<V> 개체를 사용하여 반환 값에 액세스하는 대신 다음과 같이 호출 콜백( javax.ws.rs.client.InvocationCallback<RESPONSE
> )을 정의할 수 있습니다.
// Java import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Client; import java.util.concurrent.Future; import javax.ws.rs.core.Response; import javax.ws.rs.client.InvocationCallback; ... Client client = ClientBuilder.newClient(); Future<Response> futureResp = client.target("http://example.org/bookstore/books/123") .request("application/xml") .async() .get( new InvocationCallback<Response>() { @Override public void completed(final Response resp) { // Do something when invocation is complete ... } @Override public void failed(final Throwable throwable) { throwable.printStackTrace(); } }); ...
입력된 응답에 유사한 방법을 사용할 수 있습니다.
// Java import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Client; import java.util.concurrent.Future; import javax.ws.rs.core.Response; import javax.ws.rs.client.InvocationCallback; ... Client client = ClientBuilder.newClient(); Future<BookInfo> futureResp = client.target("http://example.org/bookstore/books/123") .request("application/xml") .async() .get( new InvocationCallback<BookInfo>() { @Override public void completed(final BookInfo resp) { // Do something when invocation is complete ... } @Override public void failed(final Throwable throwable) { throwable.printStackTrace(); } }); ...