টাইমআউট এবং পুনরায় চেষ্টা

কিছু এপিআই মেথড জটিল কাজ সম্পাদন করে যা সম্পন্ন হতে কয়েক সেকেন্ডের বেশি সময় নিতে পারে। এই অনুরোধগুলো ডিফল্ট অনুমোদিত সময়ের চেয়ে বেশি সময় নিতে পারে। এর ফলে এপিআই বা ক্লায়েন্ট সাইডে ত্রুটি দেখা দিতে পারে। অনুরোধের দীর্ঘ বিলম্বের কারণে সৃষ্ট সমস্যাগুলো এড়ানোর কিছু উপায় নিচে দেওয়া হলো।

ক্লায়েন্ট লাইব্রেরিতে ডিফল্ট টাইমআউট বাড়ান

কিছু মেথড সাধারণত উচ্চ ল্যাটেন্সিতে সাড়া দেয়। এই বিষয়টি মেথডটির রেফারেন্স পেজে উল্লেখ করা থাকে। অন্যান্য মেথডও বিরল ক্ষেত্রে উচ্চ ল্যাটেন্সিতে সাড়া দিতে পারে।

কিছু ক্লায়েন্ট লাইব্রেরির ডিফল্ট টাইমআউট সীমা থাকে। অনুরোধের লেটেন্সি বেশি হলে এই সীমাগুলোর কারণে ত্রুটি দেখা দেয়। সমর্থিত কিছু ক্লায়েন্ট লাইব্রেরির ডিফল্ট টাইমআউটগুলো হলো:

  • জাভা : ২০ সেকেন্ড।
  • পাইথন : ৬০ সেকেন্ড।
  • পিএইচপি : ৬০ সেকেন্ড।

ক্লায়েন্ট-সাইড ত্রুটি এড়াতে এই ডিফল্ট সীমাগুলো বাড়িয়ে দিন। আপনার ক্লায়েন্ট লাইব্রেরির জন্য ডিফল্ট টাইমআউট পরিবর্তন করার পদ্ধতি নিচে দেওয়া হলো:

জাভা

  1. প্রয়োজনীয় সম্পদ আমদানি করুন।

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. HTTP টাইমআউট সেট করার জন্য ফাংশন তৈরি করুন।

    /**
     * Adjusts HTTP timeout values used by the provided request initializer.
     *
     * @param requestInitializer The {@link HttpRequestInitializer} used to authorize requests.
     * @param newHttpTimeout The HTTP timeout for requests in seconds.
     * @return An {@link HttpRequestInitializer} with modified HTTP timeout values.
     */
    private static HttpRequestInitializer setHttpTimeout(
        final HttpRequestInitializer requestInitializer,
        final int newHttpTimeout) {
      return new HttpRequestInitializer() {
        @Override
        public void initialize(HttpRequest httpRequest) throws IOException {
          requestInitializer.initialize(httpRequest);
          httpRequest.setConnectTimeout(newHttpTimeout * 1_000);
          httpRequest.setReadTimeout(newHttpTimeout * 1_000);
        }
      };
    }
    
  3. ডিসপ্লে ও ভিডিও ৩৬০ এপিআই ক্লায়েন্ট তৈরি করার সময় ফাংশনটি কল করুন।

    // Create authorized API client with non-default timeouts.
    DisplayVideo service =
        new DisplayVideo.Builder(
            credential.getTransport(),
            credential.getJsonFactory(),
            setHttpTimeout(credential, http-timeout-in-seconds)
        )
            .setApplicationName("displayvideo-java-installed-app-sample")
            .build();
    

পাইথন

  1. গুগল এপিআই পাইথন ক্লায়েন্ট লাইব্রেরির http মডিউল ইম্পোর্ট করুন।

    from googleapiclient import http
    
  2. ডিফল্ট টাইমআউট ধ্রুবক আপডেট করুন।

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. এপিআই পরিষেবা তৈরি করুন।

    # Build the API service.
    service = discovery.build(
      'displayvideo',
      'v3',
      discoveryServiceUrl=discovery_url,
      credentials=credentials)
    

পিএইচপি

  1. কম্পোজার ব্যবহার করে গাজল এইচটিটিপি লাইব্রেরিটি ডাউনলোড ও ইনস্টল করুন।

    composer require guzzlehttp/guzzle:^7.0
  2. টাইমআউট মান নির্ধারণ করে Guzzle HTTP ক্লায়েন্ট তৈরি করুন।

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. গুগল ক্লায়েন্ট তৈরি করুন এবং গাজল এইচটিটিপি ক্লায়েন্ট নির্ধারণ করুন।

    $client = new Google_Client();
    $client->setHttpClient($httpClient);
    

এপিআই টাইমআউট ত্রুটিগুলি পরিচালনা করুন

বিরল ক্ষেত্রে, অনুরোধগুলি ১৮০ সেকেন্ডের সার্ভার টাইমআউট অতিক্রম করতে পারে। এই ক্ষেত্রে, এপিআই একটি 408 বা 504 ত্রুটি ফেরত দেয়।

যদি কোনো অনুরোধ এই কোডগুলোর কোনো একটি দিয়ে সাড়া দেয়, তাহলে এক্সপোনেনশিয়াল ব্যাকঅফ ব্যবহার করে অনুরোধটি পুনরায় চেষ্টা করুন।

যদি ত্রুটি অব্যাহত থাকে, তাহলে API সাপোর্টে যোগাযোগ করুন