คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
การบันทึกเป็นวิธีที่มีประสิทธิภาพวิธีหนึ่งในการแก้ไขข้อบกพร่องของปัญหา คุณสามารถบันทึกข้อมูลเกี่ยวกับคำขอ API เช่น ส่วนหัว, พารามิเตอร์ของแบบฟอร์ม, พารามิเตอร์การค้นหา, ตัวแปรแบบไดนามิก ฯลฯ เพื่อใช้อ้างอิงในภายหลังได้ คุณสามารถบันทึกข้อมูลไว้ในเครื่องบน Message Processor (Apigee Edge for Private Cloud เท่านั้น) หรือในเซิร์ฟเวอร์ของบุคคลที่สาม เช่น Sumo Logic, Splunk หรือ Loggly
รูปแบบที่ไม่แนะนำ
ในโค้ดด้านล่างนี้ ระบบจะใช้ออบเจ็กต์ httpClient ในนโยบาย JavaScript เพื่อบันทึกข้อมูลลงใน
เซิร์ฟเวอร์ Sumo Logic ซึ่งหมายความว่ากระบวนการบันทึกจะเกิดขึ้นระหว่างการประมวลผลคำขอ/คำตอบ แนวทางนี้ไม่ได้ผลดีเนื่องจากทำให้เวลาในการประมวลผลเพิ่มขึ้น ซึ่งจะทำให้เวลาในการตอบสนองโดยรวมเพิ่มขึ้น
LogData_JS:
<!-- /antipatterns/examples/1-4.xml --> <Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS"> <DisplayName>LogData_JS</DisplayName> <ResourceURL>jsc://LogData.js</ResourceURL> </Javascript>
LogData.js:
<!-- /antipatterns/examples/1-5.xml --> var sumoLogicURL = "..."; httpClient.send(sumoLogicURL); waitForComplete();
สาเหตุของปัญหาในที่นี้คือการเรียก waitForComplete() ซึ่งจะระงับการทำงานของผู้เรียกจนกว่ากระบวนการบันทึกจะเสร็จสมบูรณ์ รูปแบบที่ถูกต้องคือการทำให้การเรียกนี้เป็นแบบไม่พร้อมกันโดยการนำการเรียกนี้ออก
ผลกระทบ
- การเรียกใช้โค้ดการบันทึกผ่านนโยบาย JavaScript จะเพิ่มเวลาในการตอบสนองของคำขอ API
- คำขอพร้อมกันอาจทำให้ทรัพยากรใน Message Processor ทำงานหนักและส่งผลเสียต่อการประมวลผลคำขออื่นๆ
แนวทางปฏิบัติแนะนำ
- ใช้นโยบาย MessageLogging เพื่อโอน/บันทึกข้อมูลลงในเซิร์ฟเวอร์บันทึกหรือบริการจัดการบันทึกของบุคคลที่สาม เช่น Sumo Logic, Splunk, Loggly ฯลฯ
- ข้อได้เปรียบที่ใหญ่ที่สุดของนโยบายการบันทึกข้อความคือคุณสามารถกำหนดนโยบายนี้ใน Post Client Flow ซึ่งจะทำงานหลังจากส่งคำตอบกลับไปยังแอปไคลเอ็นต์ที่ส่งคำขอ
- การกำหนดนโยบายนี้ใน Post Client Flow จะช่วยแยกกิจกรรมการบันทึกและการประมวลผลคำขอ/คำตอบออกจากกัน ซึ่งจะช่วยหลีกเลี่ยงเวลาในการตอบสนอง
- หากมีข้อกำหนดหรือเหตุผลที่เฉพาะเจาะจงในการบันทึกผ่าน JavaScript (ไม่ใช่ตัวเลือก Post
Client Flow ที่กล่าวถึงข้างต้น) คุณจะต้องดำเนินการแบบไม่พร้อมกัน กล่าวอีกนัยหนึ่งคือ
หากคุณใช้ออบเจ็กต์
httpClientคุณจะต้องตรวจสอบว่า JavaScript ไม่ได้ ใช้waitForComplete