คู่มือนี้สรุปวิธีปรับแต่งองค์ประกอบขั้นสูงหลายอย่างของ
ไลบรารีของไคลเอ็นต์ Java รูปแบบที่พบบ่อยคือคุณลักษณะจำนวนมากเหล่านี้ใช้
แทน Callable
แทนที่จะเป็นเมธอดมาตรฐาน Callable คือ
มักเป็นที่ที่ดีในการค้นหาฟีเจอร์ตาม RPC อื่นๆ ที่ไม่ได้บันทึกไว้
ที่นี่
หมดเวลา
ไลบรารี Java มีพื้นที่สำหรับการตั้งค่าระยะหมดเวลาในระดับต่อการโทร
ค่าเริ่มต้นจะกำหนดตามการตั้งค่า method_config/timeout
ใน
googleads_grpc_service_config.json.
โปรดตั้งค่าให้ต่ำลงหากต้องการบังคับใช้ขีดจำกัดที่สั้นลงสำหรับเวลาสูงสุดสำหรับ
การเรียก 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
หากปัญหานี้เกิดขึ้น วิธีที่ดีที่สุดคือแยกการค้นหาออกเป็น
ดำเนินการกับกลุ่มต่างๆ พร้อมกัน เพื่อหลีกเลี่ยงสถานการณ์ที่
การเรียกใช้คำขอล้มเหลว วิธีเดียวที่จะกู้คืนคือการเรียกใช้คำขอ
อีกครั้งตั้งแต่ต้น
การตั้งค่าการลองซ้ำ
ไลบรารี Java ยังมีพื้นที่สำหรับกำหนดการตั้งค่าการลองอีกครั้งใน
ต่อการโทรหนึ่งครั้ง หากต้องการใช้ฟีเจอร์นี้ คุณควรใช้ออบเจ็กต์ที่เรียกใช้ได้โดยตรง
เช่น หากโทรหา 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 ทั้งหมดที่
เพียงครั้งเดียวเพื่อให้กลไกสร้าง
ได้สะดวกยิ่งขึ้น
คลาสของบริการ
หากประสิทธิภาพของคำขอแรกอยู่ในเส้นทางที่สำคัญสำหรับแอปพลิเคชันของคุณ คุณควรทำตามขั้นตอนต่อไปนี้
สร้าง
GoogleAdsClient
เมื่อเริ่มต้นใช้งาน ก่อนจะแสดงคำขอของผู้ใช้ส่งคำขออุ่นเครื่อง 2-3 รายการไปยัง 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
App Engine ไม่สามารถทำให้ใช้งานได้หาก JAR > 32 MB
App Engine มีโควต้า 32 MB สำหรับไฟล์ที่อัปโหลดแต่ละไฟล์ JAR สำหรับ 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 MB และ
อัปโหลดข้อความเหล่านั้นแทน
ทรัพยากร Dependency ของเงา
หากโปรเจ็กต์ของคุณมีทรัพยากร Dependency ที่ขัดแย้งกับทรัพยากรของไลบรารี คุณควร ตรวจสอบทรัพยากร Dependency ของโปรเจ็กต์โดยใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้ แก้ไขทรัพยากร Dependency ของโปรเจ็กต์ตามต้องการ
Maven
mvn dependency:tree
Gradle
./gradlew dependencies
หากแก้ไขความขัดแย้งของทรัพยากร Dependency ไม่ได้ คุณสามารถใช้ แรเงา ของไลบรารีเวอร์ชันแทน
Maven
<dependency> <groupId>com.google.api-ads</groupId> <artifactId>google-ads-shadowjar</artifactId> <version>33.0.0</version> </dependency>
Gradle
implementation 'com.google.api-ads:google-ads-shadowjar:33.0.0'