אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
רישום ביומן הוא אחת הדרכים היעילות לניפוי באגים. אפשר לרשום ביומן את המידע על בקשת ה-API, כמו כותרות, פרמטרים של טופס, פרמטרים של שאילתה, משתנים דינמיים וכו', כדי שיהיה אפשר לעיין בו בהמשך. אפשר לרשום את המידע ביומן באופן מקומי במעבדי ההודעות (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.
- בקשות בו-זמניות עלולות להעמיס על המשאבים של מעבד ההודעות, וכתוצאה מכך לפגוע בעיבוד של בקשות אחרות.
שיטה מומלצת
- אפשר להשתמש במדיניות MessageLogging כדי להעביר נתונים לשרתי יומנים או לשירותים לניהול יומנים של צד שלישי, כמו Sumo Logic, Splunk, Loggly וכו'.
- היתרון הכי גדול של מדיניות רישום ההודעות הוא שאפשר להגדיר אותה בתהליך העבודה של הלקוח אחרי הבקשה, שמופעל אחרי שהתשובה נשלחת בחזרה לאפליקציית הלקוח ששלחה את הבקשה.
- הגדרת המדיניות הזו בתהליך Post Client עוזרת להפריד בין פעילות הרישום ביומן לבין עיבוד הבקשה/התגובה, וכך למנוע השהיות.
- אם יש דרישה ספציפית או סיבה לבצע רישום ביומן באמצעות JavaScript (לא האפשרות של זרימת הלקוח Post
שצוינה למעלה), צריך לבצע את הרישום באופן אסינכרוני. במילים אחרות,
אם אתם משתמשים באובייקט
httpClient, אתם צריכים לוודא שקוד ה-JavaScript לא מטמיע אתwaitForComplete