এই নির্দেশিকায় Java ক্লায়েন্ট লাইব্রেরির আরও উন্নত কিছু দিক কীভাবে কাস্টমাইজ করতে হয় তা উল্লেখ করা হয়েছে। একটি সাধারণ প্যাটার্ন হল যে এই ফিচারগুলির মধ্যে অনেকগুলি স্ট্যান্ডার্ড সুবিধার পদ্ধতির পরিবর্তে
অন্তর্নিহিত Callable-এর উপর নির্ভর করে। সাধারণত, কলযোগ্য
হল অন্যান্য পার-RPC ফিচার দেখার জন্য ভাল জায়গা, যেগুলি এখানে
ডকুমেন্ট করা নেই।
সময় সমাপ্ত
Java লাইব্রেরি, কল-পিছু লেভেলে টাইম-আউট সেট করার জন্য একটি সারফেস প্রদান করে।
googleads_grpc_service_config.json-এ method_config/timeout সেটিংয়ের
উপর ভিত্তি করে ডিফল্ট ভ্যালু সেট করা হয়। API কলের জন্য সর্বাধিক সময়ের উপর আরও কম সীমা প্রয়োগ করতে হলে
কম ভ্যালু সেট করুন।
এই ফিচার ব্যবহার করতে, সরাসরি Callable অবজেক্ট কল করুন। যেমন, কল করার GoogleAdsService.searchStream() সময়, নিম্নলিখিতভাবে টাইম-আউট সেট করুন:
try (GoogleAdsServiceClient googleAdsServiceClient =
googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) {
// Constructs the SearchGoogleAdsStreamRequest.
SearchGoogleAdsStreamRequest request =
SearchGoogleAdsStreamRequest.newBuilder()
.setCustomerId(Long.toString(customerId))
.setQuery("SELECT campaign.id, campaign.name FROM campaign")
.build();
// Executes the API call with a timeout of 5 minutes.
ServerStream<SearchGoogleAdsStreamResponse> stream =
googleAdsServiceClient
.searchStreamCallable()
.call(
request,
GrpcCallContext.createDefault()
.withTimeout(Duration.of(5, ChronoUnit.MINUTES)));
for (SearchGoogleAdsStreamResponse response : stream) {
// Processes the response rows.
}
}
আপনি টাইমআউট ২ ঘণ্টা বা তার বেশি সময়ের জন্য সেট করতে পারেন, তবে API এখনও অত্যন্ত দীর্ঘ সময় ধরে চলা অনুরোধের জন্য টাইমআউট হতে পারে এবং
DEADLINE_EXCEEDED সমস্যা দেখাতে পারে।
এটি কোনও সমস্যা হয়ে দাঁড়ালে, কোয়েরিটি ভাগ করে নিয়ে
সমান্তরালভাবে চাঙ্কগুলি এক্সিকিউট করা সবচেয়ে ভাল; এর ফলে দীর্ঘ সময় ধরে চলা
অনুরোধ ব্যর্থ হওয়ার পরিস্থিতি এড়ানো যায় এবং রিকভার করার একমাত্র উপায় হল
শুরু থেকে আবার অনুরোধ ট্রিগার করা।
সেটিংস আবার চেষ্টা করুন
এছাড়াও, Java লাইব্রেরি প্রতি-কল লেভেলে আবার চেষ্টা করার সেটিংস কনফিগার করার জন্য একটি সারফেস প্রদান করে। এই ফিচার ব্যবহার করতে, সরাসরি Callable অবজেক্ট কল করুন। যেমন, GoogleAdsService.searchStream()-এ কল করার সময়, আবার চেষ্টা করার সেটিংস
নিম্নলিখিতভাবে কনফিগার করুন:
try (GoogleAdsServiceClient googleAdsServiceClient =
googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) {
SearchGoogleAdsStreamRequest request =
SearchGoogleAdsStreamRequest.newBuilder()
.setCustomerId(Long.toString(customerId))
.setQuery("SELECT campaign.id, campaign.name FROM campaign")
.build();
// 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());
// Issues the streaming search request.
ServerStream<SearchGoogleAdsStreamResponse> stream =
googleAdsServiceClient.searchStreamCallable().call(request, context);
for (SearchGoogleAdsStreamResponse response : stream) {
// Processes the response rows.
}
}
স্টার্টআপ টাইম পারফর্ম্যান্স অপ্টিমাইজেশন
প্রথমবার GoogleAdsClient ইনস্ট্যান্স তৈরি করার সময় আপনি সামান্য দেরি লক্ষ্য করতে পারেন। পরিষেবার জন্য ফ্লুয়েন্ট ইন্টারফেসের
(GoogleAdsClient.getLatestVersion()) কারণে এটি হয়, যা পরিষেবা ক্লায়েন্ট তৈরি করার জন্য একটি সুবিধাজনক মেকানিজম প্রদান করতে
একবার API পরিষেবা ক্লাস লোড করে।
আপনার অ্যাপ্লিকেশনের জন্য প্রথম অনুরোধের পারফর্ম্যান্স যদি ক্রিটিক্যাল পাথে থাকে, তাহলে এই ধাপগুলি অনুসরণ করুন:
ব্যবহারকারীর অনুরোধ পরিবেশন করার আগে, স্টার্ট-আপে
GoogleAdsClientতৈরি করুন।প্রসেস প্রথম শুরু হলে 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 (ApiException ex) { // Do nothing, we're expecting this to fail. } } }
প্রসেস প্রতি একবারই ওয়ার্ম-আপ অনুরোধ চালাতে হয়। পরবর্তী প্রতিটি পরিষেবা ক্লায়েন্ট ক্রিয়েশন অটোমেটিক প্রি-লোডেড ক্লাস আবার ব্যবহার করে।
সার্ভিস ক্লায়েন্ট আবার ব্যবহার করা
যেখানে সম্ভব সেখানে আপনার পরিষেবা ক্লায়েন্ট ইনস্ট্যান্স আবার ব্যবহার করা উচিত কারণ
GoogleAdsClient.getLatestVersion().createYYYServiceClient() (বা
getVersion26()-এর মতো ভার্সন-নির্দিষ্ট অ্যাক্সেসর)-এ প্রতিটি কল
একটি নতুন অন্তর্নিহিত কানেকশন এবং সংশ্লিষ্ট রিসোর্স তৈরি করে।
পরিষেবা ক্লায়েন্টের আর প্রয়োজন না থাকলে সেটি বন্ধ করে দিতে ভুলবেন না। আপনি এটি try-with-resources ব্লকে অথবা সার্ভিস ক্লায়েন্টে
close() কল করে করতে পারেন।
API অনুরোধ করার জন্য আপনি যদি কোনও বন্ধ পরিষেবা ক্লায়েন্ট ব্যবহার করার চেষ্টা করেন, তাহলে পরিষেবা
ক্লায়েন্ট পদ্ধতি একটি java.util.concurrent.RejectedExecutionException থ্রো করে।
JAR > ৩২ এমবি হলে App Engine ডিপ্লয় করতে পারে না
প্রতিটি আপলোড করা ফাইলের জন্য App Engine-এর কোটা হল ৩২ এমবি। google-ads-এর জন্য JAR
এর থেকে অনেক বড়, বিশেষ করে শেড বা শ্যাডো JAR
ডেপ্লয়মেন্ট ব্যবহার করার সময়। আপনি JAR ম্যানুয়ালি ডেপ্লয় করলে, এই ধরনের সমস্যা হতে পারে:
ERROR: (gcloud.app.deploy) Cannot upload file [<your-app>/WEB-INF/lib/google-ads-48.0.0.jar],
which has size [66095767] (greater than maximum allowed size of [33554432])
পরিবর্তে, App Engine Gradle প্লাগ-ইন বা
Maven প্লাগ-ইন ব্যবহার করে ডিপ্লয় করুন। প্রতিটি প্লাগ-ইন একটি enableJarSplitting
বিকল্প প্রদান করে যা প্রতিটি JAR-কে ১০ এমবি করে খণ্ডে বিভক্ত করে এবং পরিবর্তে সেগুলি আপলোড করে।
শ্যাডো ডিপেন্ডেন্সি
আপনার প্রোজেক্টে এমন ডিপেন্ডেন্সি থাকলে যা লাইব্রেরির ডিপেন্ডেন্সির সাথে বিরোধ করে, নিম্নলিখিত কমান্ডগুলির মধ্যে একটি ব্যবহার করে আপনার প্রোজেক্টের ডিপেন্ডেন্সি হায়ারার্কি পরিদর্শন করুন, এবং তারপর প্রয়োজন অনুযায়ী আপনার প্রোজেক্টের ডিপেন্ডেন্সি পরিবর্তন করুন (অথবা বিল অফ মেটেরিয়াল ব্যবহার করুন):
Maven
mvn dependency:treeGradle
./gradlew dependenciesডিপেন্ডেন্সি সংক্রান্ত সমস্যার সমাধান করা সম্ভব না হলে, আপনি লাইব্রেরির শেডেড ভার্সনের উপর নির্ভর করতে পারেন:
Maven
<dependency> <groupId>com.google.api-ads</groupId> <artifactId>google-ads-shadowjar</artifactId> <version>48.0.0</version> </dependency>
Gradle
implementation 'com.google.api-ads:google-ads-shadowjar:48.0.0'