Varias llamadas a la API de Google Ads devuelven operaciones de larga duración (LRO). Estos hacen un seguimiento del estado de un trabajo que se ejecuta durante un período prolongado sin requerir un solo RPC de bloqueo.
Clase OperationFuture
Interactúas con los LRO en la biblioteca cliente de Java con la clase OperationFuture. Dado que OperationFuture depende del cliente de servicio subyacente para sondear la API en busca de actualizaciones de estado, asegúrate de que el cliente de servicio permanezca abierto y activo hasta que se complete la operación.
No se recomienda:
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);
}
}
Recomendado:
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);
}
Observa cómo OperationFuture solo se usa mientras OfflineUserDataJobServiceClient permanece abierto dentro del bloque try-with-resources.