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();
}
});
...