หมดเวลา

บริการ Google Ads API ทั้งหมดมีการตั้งค่าเริ่มต้นรวมถึงระยะหมดเวลาที่การขนส่งใช้ บริการใดก็ตามใน Google Ads API เวอร์ชันหนึ่งๆ จะมีไฟล์ JSON โดยเฉพาะที่มีการตั้งค่าเริ่มต้นเหล่านี้กำหนดไว้ที่ระดับบริการและระดับเมธอด เช่น คุณดูไฟล์ที่เกี่ยวข้องกับ Google Ads API เวอร์ชันล่าสุดได้ที่นี่

การตั้งค่าเริ่มต้นนั้นเพียงพอสำหรับกรณีการใช้งานส่วนใหญ่ แต่อาจมีบางครั้งที่คุณต้องการลบล้างการตั้งค่าเหล่านั้น ไลบรารีของไคลเอ็นต์สำหรับ PHP รองรับการลบล้างการตั้งค่าระยะหมดเวลาสำหรับทั้งการสตรีมของเซิร์ฟเวอร์และการเรียกอิสระ

คุณกำหนดระยะหมดเวลาเป็น 2 ชั่วโมงขึ้นไปได้ แต่ API อาจยังคงหมดเวลาคำขอที่ใช้เวลานานมากและแสดงผลข้อผิดพลาด DEADLINE_EXCEEDED

การลบล้างระยะหมดเวลาสำหรับการเรียกแบบสตรีมของเซิร์ฟเวอร์

เมธอดบริการ Google Ads API เพียงวิธีเดียวที่ใช้การเรียกประเภทนี้คือ GoogleAdsService.SearchStream หากต้องการลบล้างระยะหมดเวลาเริ่มต้น คุณต้องเพิ่มพารามิเตอร์อีกเมื่อเรียกใช้เมธอด ดังนี้

private static function makeServerStreamingCall(
    GoogleAdsClient $googleAdsClient,
    int $customerId
) {
    $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
    // Creates a query that retrieves all campaign IDs.
    $query = 'SELECT campaign.id FROM campaign';

    $output = '';
    try {
        // Issues a search stream request by setting a custom client timeout.
        /** @var GoogleAdsServerStreamDecorator $stream */
        $stream = $googleAdsServiceClient->searchStream(
            SearchGoogleAdsStreamRequest::build($customerId, $query),
            [
                // Any server streaming call has a default timeout setting. For this
                // particular call, the default setting can be found in the following file:
                // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V16/Services/resources/google_ads_service_client_config.json.
                //
                // When making a server streaming call, an optional argument is provided and can
                // be used to override the default timeout setting with a given value.
                'timeoutMillis' => self::CLIENT_TIMEOUT_MILLIS
            ]
        );
        // Iterates over all rows in all messages and collects the campaign IDs.
        foreach ($stream->iterateAllElements() as $googleAdsRow) {
            /** @var GoogleAdsRow $googleAdsRow */
            $output .= ' ' . $googleAdsRow->getCampaign()->getId();
        }
        print 'The server streaming call completed before the timeout.' . PHP_EOL;
    } catch (ApiException $exception) {
        if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) {
            print 'The server streaming call did not complete before the timeout.' . PHP_EOL;
        } else {
            // Bubbles up if the exception is not about timeout.
            throw $exception;
        }
    } finally {
        print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL;
    }
}
      

การลบล้างระยะหมดเวลาสำหรับการเรียกแบบอิสระ

เมธอดบริการ Google Ads API ส่วนใหญ่ใช้การเรียกแบบอิสระ ตัวอย่างทั่วไปคือ GoogleAdsService.Search และ GoogleAdsService.Mutate หากต้องการลบล้างระยะหมดเวลาเริ่มต้น คุณต้องเพิ่มพารามิเตอร์อีกเมื่อเรียกใช้เมธอด ดังนี้

private static function makeUnaryCall(GoogleAdsClient $googleAdsClient, int $customerId)
{
    $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
    // Creates a query that retrieves all campaign IDs.
    $query = 'SELECT campaign.id FROM campaign';

    $output = '';
    try {
        // Issues a search request by setting a custom client timeout.
        $response = $googleAdsServiceClient->search(
            SearchGoogleAdsRequest::build($customerId, $query),
            [
                // Any unary call is retryable and has default retry settings.
                // Complete information about these settings can be found here:
                // https://googleapis.github.io/gax-php/master/Google/ApiCore/RetrySettings.html.
                // For this particular call, the default retry settings can be found in the
                // following file:
                // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V16/Services/resources/google_ads_service_client_config.json.
                //
                // When making an unary call, an optional argument is provided and can be
                // used to override the default retry settings with given values.
                'retrySettings' => [
                    // Sets the maximum accumulative timeout of the call, it includes all tries.
                    'totalTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS,
                    // Sets the timeout that is used for the first try to one tenth of the
                    // maximum accumulative timeout of the call.
                    // Note: This overrides the default value and can lead to
                    // RequestError.RPC_DEADLINE_TOO_SHORT errors when too small. We recommend
                    // to do it only if necessary.
                    'initialRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 10,
                    // Sets the maximum timeout that can be used for any given try to one fifth
                    // of the maximum accumulative timeout of the call (two times greater than
                    // the timeout that is used for the first try).
                    'maxRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 5
                ]
            ]
        );
        // Iterates over all rows in all messages and collects the campaign IDs.
        foreach ($response->iterateAllElements() as $googleAdsRow) {
            /** @var GoogleAdsRow $googleAdsRow */
            $output .= ' ' . $googleAdsRow->getCampaign()->getId();
        }
        print 'The unary call completed before the timeout.' . PHP_EOL;
    } catch (ApiException $exception) {
        if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) {
            print 'The unary call did not complete before the timeout.' . PHP_EOL;
        } else {
            // Bubbles up if the exception is not about timeout.
            throw $exception;
        }
    } finally {
        print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL;
    }
}