장기 실행 작업 (LRO)

Google Ads API를 여러 번 호출하면 장기 실행 작업 (LRO)이 반환됩니다. 이러한 작업은 단일 차단 RPC를 요구하지 않고 장기간에 걸쳐 실행되는 작업의 상태를 추적합니다.

OperationFuture 클래스

OperationFuture 클래스를 사용하여 Java 클라이언트 라이브러리에서 LRO와 상호작용합니다. OperationFuture는 기본 서비스 클라이언트를 사용하여 API에서 상태 업데이트를 폴링하므로 작업이 완료될 때까지 서비스 클라이언트가 열려 있고 활성 상태인지 확인합니다.

다음은 권장하지 않습니다.

private void executeOperation(String jobName) throws Exception {
  OperationFuture<Empty, OfflineUserDataJobMetadata> future =
      startLongRunningOperation(jobName);
  // FAILS: The service client was already closed when
  // startLongRunningOperation() exited its try-with-resources block, so
  // future.get() fails when polling.
  future.get();
}

private OperationFuture<Empty, OfflineUserDataJobMetadata>
    startLongRunningOperation(String jobToStart) {
  try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
      googleAdsClient
          .getLatestVersion()
          .createOfflineUserDataJobServiceClient()) {
    // Issues an asynchronous request to run the offline user data job.
    return offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(
        jobToStart);
  }
}

다음을 권장합니다.

private void executeOperation(String jobName) throws Exception {
  try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
      googleAdsClient
          .getLatestVersion()
          .createOfflineUserDataJobServiceClient()) {
    OperationFuture<Empty, OfflineUserDataJobMetadata> future =
        startLongRunningOperation(offlineUserDataJobServiceClient, jobName);
    // Waits for the operation to complete (with a timeout) while the client is
    // still open.
    future.get(5, TimeUnit.MINUTES);
  }
}

private OperationFuture<Empty, OfflineUserDataJobMetadata>
    startLongRunningOperation(
        OfflineUserDataJobServiceClient offlineUserDataJobServiceClient,
        String jobToStart) {
  return offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(jobToStart);
}

OperationFuture는 OfflineUserDataJobServiceClient가 try-with-resources 블록 내에서 열려 있는 동안에만 사용됩니다.