40.4. Polling Approach를 사용하여 비동기 클라이언트 구현


40.4.1. 개요

폴링 접근 방식은 두 가지 접근 방식을 통해 비동기 애플리케이션을 개발하는 데 더 간단합니다. 클라이언트는 OperationNameAsync() 라는 비동기 메서드를 호출하고 응답을 폴링하는 Response<T > 개체를 반환합니다. 응답을 기다리는 동안 클라이언트가 수행하는 작업은 애플리케이션의 요구 사항에 따라 다릅니다. 폴링을 처리하는 데는 다음 두 가지 기본 패턴이 있습니다.

  • 비차단 폴링- 주기적으로 비차단 응답<T>.isDone() 메서드를 호출하여 결과가 준비되었는지 확인합니다. 결과가 준비되면 클라이언트가 처리합니다. 그렇지 않은 경우 클라이언트는 다른 작업을 계속합니다.
  • 폴링 차단- 즉시 Response<T>.get() 를 호출하고 응답이 도달할 때까지 차단합니다(선택적으로 시간 초과 지정).

40.4.2. 비차단 패턴 사용

예 40.6. “비동기 작업 호출에 대한 Polling Polling Approach를 차단하지 않음”예 40.1. “비동기 계약에 대한 WSDL 계약 예” 에 정의된 CryostatMeSometime 작업에 대한 비동기 호출을 수행하기 위해 차단이 아닌 폴링을 사용하는 방법을 보여줍니다. 클라이언트는 비동기 작업을 호출하고 주기적으로 결과가 반환되는지 확인합니다.

예 40.6. 비동기 작업 호출에 대한 Polling Polling Approach를 차단하지 않음

package demo.hw.client;

import java.io.File;
import java.util.concurrent.Future;

import javax.xml.namespace.QName;
import javax.xml.ws.Response;

import org.apache.hello_world_async_soap_http.*;

public final class Client {
  private static final QName SERVICE_NAME
    = new QName("http://apache.org/hello_world_async_soap_http",
                "SOAPService");

  private Client() {}

  public static void main(String args[]) throws Exception {

    // set up the proxy for the client

    Response<GreetMeSometimeResponse> greetMeSomeTimeResp =
      port.greetMeSometimeAsync(System.getProperty("user.name"));

      while (!greetMeSomeTimeResp.isDone()) {
      // client does some work
      }
      GreetMeSometimeResponse reply = greetMeSomeTimeResp.get();
      // process the response

      System.exit(0);
  }
}

예 40.6. “비동기 작업 호출에 대한 Polling Polling Approach를 차단하지 않음” 의 코드는 다음을 수행합니다.

프록시에서 MeSometimeAsync() 를 호출합니다.

메서드 호출은 Response<GreetMeSometimeResponse& gt; 오브젝트를 클라이언트에 즉시 반환합니다. Apache CXF 런타임은 원격 끝점에서 응답을 수신하고 Response< GreetMeSometimeResponse > 오브젝트를 채우는 방법에 대한 세부 정보를 처리합니다.

참고

런타임은 요청을 원격 끝점의 Cryostat MeSometime() 메서드로 전송하고 호출의 비동기 특성에 대한 세부 정보를 투명하게 처리합니다. 끝점 및 서비스 구현에서는 클라이언트가 응답을 기다리는 방법에 대한 세부 정보에 대해서는 절대 고려하지 않습니다.

반환된 Response 오브젝트의 isDone() 을 확인하여 응답이 도착했는지 확인합니다.

응답이 도착하지 않으면 다시 확인하기 전에 클라이언트가 계속 작동합니다.

응답이 도착하면 클라이언트는 get() 메서드를 사용하여 Response 오브젝트에서 검색합니다.

40.4.3. 차단 패턴 사용

블록 폴링 패턴을 사용하는 경우 Response 오브젝트의 isDone() 은 호출되지 않습니다. 대신 Response 개체의 get() 메서드는 원격 작업을 호출한 직후 호출합니다. get() 는 응답이 제공될 때까지 차단됩니다.

또한 get() 메서드에 시간 초과 제한을 전달할 수도 있습니다.

예 40.7. “비동기 작업 호출에 대한 Polling Approach 차단” 차단 폴링을 사용하는 클라이언트를 표시합니다.

예 40.7. 비동기 작업 호출에 대한 Polling Approach 차단

package demo.hw.client;

import java.io.File;
import java.util.concurrent.Future;

import javax.xml.namespace.QName;
import javax.xml.ws.Response;

import org.apache.hello_world_async_soap_http.*;

public final class Client {
  private static final QName SERVICE_NAME
    = new QName("http://apache.org/hello_world_async_soap_http",
                "SOAPService");

  private Client() {}

  public static void main(String args[]) throws Exception {

    // set up the proxy for the client

    Response<GreetMeSometimeResponse> greetMeSomeTimeResp =
      port.greetMeSometimeAsync(System.getProperty("user.name"));
    GreetMeSometimeResponse reply = greetMeSomeTimeResp.get();
      // process the response
      System.exit(0);
  }
}
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.