אנטי-דפוס: רישום נתונים בשרתים של צד שלישי באמצעות מדיניות JavaScript

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

רישום ביומן הוא אחת מהדרכים היעילות לניפוי באגים בבעיות. מידע על ה-API בקשות כאלו, כגון כותרות, פרמטרים של טפסים, פרמטרים של שאילתות, משתנים דינמיים וכו'. להתייחסות מאוחר יותר. המידע יכול להירשם ביומן באופן מקומי במעבדי ההודעות (Apigee Edge עבור ענן פרטי בלבד) או לשרתים של צד שלישי כמו 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 בקשה.
  • בקשות בו-זמנית עלולות להדגיש את המשאבים שבמעבד ההודעות וכתוצאה מכך וזה ישפיע לרעה על העיבוד של בקשות אחרות.

שיטה מומלצת

  • משתמשים במדיניות של MessageLogging כדי להעביר נתונים או לרשום אותם ביומן לשרתי יומן או ביומן של צד שלישי שירותי ניהול כמו Sumo Logic, Splunk, Loggly וכו'.
  • היתרון הגדול ביותר של מדיניות רישום הודעות הוא שאפשר להגדיר אותה בפוסט תהליך להשלמת לקוח, שמתבצע לאחר שהתגובה נשלחת חזרה לאפליקציית הלקוח המבקשת.
  • הגדרת המדיניות הזו בתהליך של לקוח פוסט עוזרת להפריד בין פעילות הרישום ביומן עיבוד בקשה/תגובה וכך למנוע זמני אחזור.
  • אם יש דרישה ספציפית או סיבה ספציפית לרישום ביומן באמצעות JavaScript (לא בפוסט האפשרות של העברת הלקוח שהוזכרה למעלה), יש לבצע אותה באופן אסינכרוני. במילים אחרות, אם משתמשים באובייקט httpClient, צריך לוודא שה-JavaScript לא מטמיעים את waitForComplete

קריאה נוספת