Mehrere Aufrufe der Google Ads API geben Vorgänge mit langer Ausführungszeit (Long-Running Operations, LROs) zurück. Diese verfolgen den Status eines Jobs, der über einen längeren Zeitraum ausgeführt wird, ohne dass ein einzelner blockierender RPC erforderlich ist.
Klasse „OperationFuture“
In der Java-Clientbibliothek interagieren Sie mit LROs über die
OperationFuture Klasse. Da OperationFuture darauf angewiesen ist, dass der zugrunde liegende Dienstclient die API nach Statusaktualisierungen abfragt, muss der Dienstclient geöffnet und aktiv bleiben, bis der Vorgang abgeschlossen ist.
Nicht empfohlen:
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);
}
}
Empfohlen:
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);
}
Beachten Sie, dass OperationFuture nur verwendet wird, solange OfflineUserDataJobServiceClient im Block try-with-resources geöffnet bleibt.