Google Ads API को किए गए कई कॉल, ज़्यादा समय तक चलने वाली कार्रवाइयां (एलआरओ) दिखाते हैं. ये किसी ऐसे काम की स्थिति को ट्रैक करते हैं जो लंबे समय तक चलता है. इसके लिए, किसी भी आरपीसी को ब्लॉक करने की ज़रूरत नहीं होती.
OperationFuture क्लास
Java क्लाइंट लाइब्रेरी में एलआरओ के साथ इंटरैक्ट करने के लिए, OperationFuture क्लास का इस्तेमाल किया जाता है. OperationFuture, स्टेटस अपडेट के लिए एपीआई को पोल करने के लिए, पहले से मौजूद सर्विस क्लाइंट पर निर्भर करता है. इसलिए, पक्का करें कि कार्रवाई पूरी होने तक सर्विस क्लाइंट खुला और चालू रहे.
हम इन्हें इस्तेमाल करने का सुझाव नहीं देते:
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 ब्लॉक में खुला रहता है.