উন্নত ব্যবহার

এই নির্দেশিকাটি জাভা ক্লায়েন্ট লাইব্রেরির আরও কয়েকটি উন্নত দিক কাস্টমাইজ করার রূপরেখা দেয়। একটি সাধারণ প্যাটার্ন হল যে এই বৈশিষ্ট্যগুলির মধ্যে অনেকগুলি আদর্শ পদ্ধতির পরিবর্তে অন্তর্নিহিত Callable উপর নির্ভর করে। এখানে নথিভুক্ত করা হয়নি এমন অন্যান্য প্রতি-RPC বৈশিষ্ট্যগুলি সন্ধান করার জন্য কলযোগ্য সাধারণত একটি ভাল জায়গা।

সময় শেষ

জাভা লাইব্রেরি প্রতি-কল স্তরে টাইমআউট সেট করার জন্য একটি পৃষ্ঠ প্রদান করে। googleads_grpc_service_config.json-method_config/timeout সেটিংসের উপর ভিত্তি করে ডিফল্ট মান সেট করা হয়। যদি আপনি একটি API কলের জন্য সর্বাধিক সময়ের জন্য একটি ছোট সীমা প্রয়োগ করতে চান তাহলে একটি নিম্ন মান সেট করুন৷

এই বৈশিষ্ট্যটি ব্যবহার করতে আপনার সরাসরি কলযোগ্য বস্তু ব্যবহার করা উচিত। উদাহরণস্বরূপ, যদি GoogleAdsService.searchStream() কে কল করা হয়, টাইমআউট এইভাবে সেট করা হবে:

try (GoogleAdsServiceClient googleAdsServiceClient =
    googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) {
  // Constructs the SearchGoogleAdsStreamRequest.
  SearchGoogleAdsStreamRequest request = ...

  // Executes the API call, with a timeout of 5 minutes.
  ServerStream<SearchGoogleAdsStreamResponse> result = googleAdsServiceClient
      .searchStreamCallable()
      .call(request,
          GrpcCallContext.createDefault().withTimeout(Duration.of(5, ChronoUnit.MINUTES)));
}

আপনি টাইমআউট 2 ঘন্টা বা তার বেশি সেট করতে পারেন, কিন্তু API এখনও অত্যন্ত দীর্ঘমেয়াদী অনুরোধের সময় শেষ করতে পারে এবং একটি DEADLINE_EXCEEDED ত্রুটি ফেরত দিতে পারে৷ যদি এটি একটি সমস্যা হয়ে দাঁড়ায়, সাধারণত ক্যোয়ারীটি বিভক্ত করা এবং খণ্ডগুলি সমান্তরালভাবে কার্যকর করা ভাল; এটি এমন পরিস্থিতি এড়ায় যেখানে একটি দীর্ঘ চলমান অনুরোধ ব্যর্থ হয় এবং পুনরুদ্ধারের একমাত্র উপায় হল শুরু থেকে পুনরায় অনুরোধটি ট্রিগার করা।

সেটিংস পুনরায় চেষ্টা করুন

জাভা লাইব্রেরি প্রতি-কল স্তরে পুনরায় চেষ্টা করার সেটিংস কনফিগার করার জন্য একটি পৃষ্ঠ প্রদান করে। এই বৈশিষ্ট্যটি ব্যবহার করতে আপনার সরাসরি কলযোগ্য বস্তু ব্যবহার করা উচিত। উদাহরণস্বরূপ, যদি GoogleAdsService.searchStream() কল করা হয়, তাহলে পুনরায় চেষ্টা করার সেটিংস নিম্নরূপ কনফিগার করা হবে:

// Creates a context object with the custom retry settings.
GrpcCallContext context = GrpcCallContext.createDefault()
    .withRetrySettings(RetrySettings.newBuilder()
    .setInitialRetryDelay(Duration.ofMillis(10L))
    .setMaxRetryDelay(Duration.ofSeconds(10L))
    .setRetryDelayMultiplier(1.4)
    .setMaxAttempts(10)
    .setLogicalTimeout(Duration.ofSeconds(30L))
    .build());

// Creates and issues a search Google Ads stream request.
ServerStream<SearchGoogleAdsStreamResponse> stream =
    googleAdsServiceClient.searchStreamCallable().call(request, context);

স্টার্টআপ সময় কর্মক্ষমতা অপ্টিমাইজেশান

প্রথমবার GoogleAdsClient ইন্সট্যান্স তৈরি করার সময় আপনি একটু বিলম্ব লক্ষ্য করতে পারেন। এটি পরিষেবাগুলির জন্য সাবলীল ইন্টারফেসের কারণে ( GoogleAdsClient.getVersionXX() ), যা পরিষেবা ক্লাস নির্মাণের জন্য আরও সুবিধাজনক প্রক্রিয়া প্রদান করার জন্য একযোগে সমস্ত API ক্লাস লোড করে৷

যদি প্রথম অনুরোধের কর্মক্ষমতা আপনার আবেদনের জন্য গুরুত্বপূর্ণ পথে থাকে, তাহলে আপনাকে এই পদক্ষেপগুলি অনুসরণ করতে হবে:

  1. ব্যবহারকারীর অনুরোধ পরিবেশনের আগে স্টার্টআপে GoogleAdsClient তৈরি করুন।

  2. প্রক্রিয়াটি প্রথম শুরু হলে Google Ads API-এ কয়েকটি ওয়ার্ম-আপ অনুরোধ পাঠান। উদাহরণ স্বরূপ:

    // Runs some warm-up requests.
    try (GoogleAdsServiceClient googleAdsServiceClient =
        googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) {
      // Runs 5 warm-up requests. In our profiling we see that 90% of performance
      // loss is only experienced on the first API call. After 3 subsequent calls we
      // saw a negligible improvement in performance.
      for (int i = 0; i < 5; ++i) {
        // Warm-up queries are run with a nonexistent CID so the calls will fail. If
        // you have a CID that you know will be accessible with the OAuth
        // credentials provided you may want to provide that instead and avoid the
        // try-catch.
        try {
          googleAdsServiceClient.search("-1", "Warm-up query");
        } catch (GoogleAdsException ex) {
          // Do nothing, we're expecting this to fail.
        }
      }
    }
    

ওয়ার্ম-আপ অনুরোধগুলি শুধুমাত্র প্রতি প্রক্রিয়ায় একবার চালানো দরকার। প্রতিটি পরবর্তী পরিষেবা ক্লায়েন্ট তৈরি স্বয়ংক্রিয়ভাবে প্রিলোড করা ক্লাসগুলি পুনরায় ব্যবহার করবে।

পরিষেবা ক্লায়েন্ট পুনঃব্যবহার

GoogleAdsClient.getVersionXXX().createYYYServiceClient() প্রতিটি কল একটি নতুন TCP সংযোগ তৈরি করবে বলে আপনার পরিষেবা ক্লায়েন্ট দৃষ্টান্তগুলি পুনরায় ব্যবহার করা উচিত।

আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি ক্লায়েন্টটি বন্ধ করেছেন যখন এটি আর প্রয়োজন হবে না। এটি একটি ট্রাই-ওয়াথ-রিসোর্স ব্লকে বা পরিষেবা ক্লায়েন্টে close() কল করে করা যেতে পারে।

আপনি API অনুরোধ করার জন্য একটি বন্ধ পরিষেবা ক্লায়েন্ট ব্যবহার করার চেষ্টা করলে, পরিষেবা ক্লায়েন্ট পদ্ধতি একটি java.util.concurrent.RejectedExecutionException নিক্ষেপ করবে।

JAR > 32 MB হলে অ্যাপ ইঞ্জিন স্থাপন করতে ব্যর্থ হয়

অ্যাপ ইঞ্জিনে প্রতিটি আপলোড করা ফাইলের জন্য 32 MB কোটা রয়েছে৷ google-ads জন্য JAR এর থেকে যথেষ্ট বড় হবে, এমনকি শেড/শ্যাডো জার স্থাপনা ব্যবহার করেও। আপনি যদি হাত দিয়ে বয়াম স্থাপন করেন তবে আপনি এর মতো ত্রুটি পেতে পারেন:

ERROR: (gcloud.app.deploy) Cannot upload file [<your-app>/WEB-INF/lib/google-ads-14.0.0.jar],
which has size [66095767] (greater than maximum allowed size of [33554432])

পরিবর্তে, AppEngine Gradle প্লাগইন বা Maven প্লাগইন ব্যবহার করে স্থাপন করুন। প্রত্যেকের কাছে enableJarSplitting জন্য একটি বিকল্প রয়েছে যা প্রতিটি জারকে 10 এমবি খণ্ডে বিভক্ত করবে এবং পরিবর্তে সেগুলি আপলোড করবে।

ছায়া নির্ভরতা

যদি আপনার প্রকল্পের নির্ভরতা থাকে যা লাইব্রেরির সাথে বিরোধপূর্ণ, তাহলে আপনাকে নিম্নলিখিত কমান্ডগুলির মধ্যে একটি ব্যবহার করে আপনার প্রকল্পের নির্ভরতা পরিদর্শন করা উচিত, তারপর প্রয়োজন অনুসারে আপনার প্রকল্পের নির্ভরতা পরিবর্তন করুন।

মাভেন

mvn dependency:tree

গ্রেডল

./gradlew dependencies

যদি নির্ভরতা দ্বন্দ্বের সমাধান করা অসম্ভব হয় তবে আপনি পরিবর্তে লাইব্রেরির ছায়াযুক্ত সংস্করণের উপর নির্ভর করতে পারেন।

মাভেন

<dependency>
  <groupId>com.google.api-ads</groupId>
  <artifactId>google-ads-shadowjar</artifactId>
  <version>31.0.0</version>
</dependency>

গ্রেডল

implementation 'com.google.api-ads:google-ads-shadowjar:31.0.0'