العمليات طويلة الأمد (LRO)

تعرض عدة طلبات إلى Google Ads API عمليات طويلة الأمد (LRO). تتتبّع هذه العمليات حالة مهمة يتم تنفيذها على مدار فترة زمنية طويلة بدون الحاجة إلى إجراء عملية استدعاء إجراء عن بُعد (RPC) واحدة تحظر التنفيذ.

فئة 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.