Google Ads API에 대한 여러 호출은 장기 실행 작업 (LRO)을 반환합니다. 이는 단일 차단 RPC가 필요하지 않고 장기간 실행되는 작업의 상태를 추적합니다.
OperationFuture 클래스
Java 클라이언트 라이브러리에서 OperationFuture 클래스를 사용하여 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는 try-with-resources 블록 내에서 OfflineUserDataJobServiceClient가 열려 있는 동안에만 사용됩니다.