אתם צופים במסמכי העזרה של Apigee Edge.
לעיון במאמרי העזרה של Apigee X. מידע
InvalidMessageWeight
קוד שגיאה
policies.ratelimit.InvalidMessageWeight
גוף התשובה לשגיאה
{ "fault": {jdoe "faultstring": "Invalid message weight value [invalid_value]", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
הודעת שגיאה לדוגמה
{ "fault": { "faultstring": "Invalid message weight value 1.5", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
סיבה
השגיאה הזו מתקבלת אם הערך שצוין לרכיב <MessageWeight>
באמצעות משתנה זרימה לא תקין (ערך לא מספר שלם).
לדוגמה, אם הערך של משתנה הזרימה שצוין לאלמנט <MessageWeight>
הוא 1.5 (ערך שאינו מספר שלם), מתרחשת השגיאה.
אבחון
מזהים את הערך הלא חוקי ששימש את הרכיב
<MessageWeight>
במדיניות Spike Arrest. המידע הזה מופיע ברכיבfaultstring
של תגובת השגיאה. לדוגמה, בשגיאה הבאה, הערך הלא חוקי שמשמש לרכיב<MessageWeight>
הוא1.5
:"faultstring": "Invalid message weight value 1.5"
בודקים את כל כללי המדיניות של Spike Arrest בשרת ה-proxy הספציפי של ה-API שבו אירעה התקלה. יכולה להיות מדיניות אחת או יותר של Spike Arrest שבה מצוין האלמנט
<MessageWeight>
.לדוגמה, המדיניות הבאה מציינת את הערך של
<MessageWeight>
דרך משתנה תהליך שנקראmessage_weight:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy"> <DisplayName>SpikeArrest_AuthProxy</DisplayName> <Properties/> <Identifier ref="request.header.some-header-name"/> <Rate>100ps</Rate> <MessageWeight ref="message_weight"/> </SpikeArrest>
קובעים את הערך של המשתנה שמשמש ברכיב
<MessageWeight>
של כללי המדיניות לטיפול בתנודות חדות בבקשות. אפשר לחלץ את הערך של משתנה התהליך מכותרות HTTP, מפרמטרים של שאילתות, ממטען בקשה של XML או JSON או להגדיר אותו במדיניות אחרת.- מאתרים את הקוד ב-API proxy, שבו המשתנה הוגדר לראשונה.
- אחרי שמבינים קודם את המדיניות שבה המשתנה מוגדר ומאוכלס, צריך לבדוק איך הערך של המשתנה מוגדר.
- אם הערך של משתנה התהליך תואם לערך שצוין בשלב 1 שלמעלה, זהו הגורם לשגיאה.
לדוגמה, נניח שנעשה שימוש במדיניות JavaScript לפני מדיניות מניעת העלייה החדה בביקוש כדי להגדיר את המשתנה
message_weight
על סמך שיטת הבקשה, כפי שמוצג בהמשך:var verb = context.getVariable("request.verb"); context.setVariable("message_weight", "1.5"); if (verb == 'POST') { context.setVariable("message_weight", "2"); }
שימו לב שהערך של המשתנה
message_weight
הוא1.5
, והוא לא תקין (מספר לא שלם).
רזולוציה
מוודאים שהערך של הרכיב MessageWeight
הוא ערך תקין (ערך שלם).
כדי לתקן את הדוגמה שלמעלה, אפשר לשנות את הערך של המשתנה message_weight
ב-JavaScript למספר שלם:
var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
context.setVariable("message_weight", "2");
}
FailedToResolveSpikeArrestRate
קוד שגיאה
policies.ratelimit.FailedToResolveSpikeArrestRate
גוף התשובה לשגיאה
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
הודעת שגיאה לדוגמה
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
סיבה
השגיאה הזו מתקבלת אם אי אפשר לפענח את ההפניה למשתנה שמכיל את הגדרת התעריף ברכיב <Rate>
לערך בתוך המדיניות בנושא מעצר/ת שיא. הרכיב הזה הוא חובה, והוא משמש לציון שיעור החסימה של פסגות (spikes) בפורמט {int}pm
או {int}ps
. לדוגמה, הערך של {int}pm
יכול להיות 500pm
, כלומר 500 שיחות בדקה. באופן דומה, ערך של 10ps
מציין 10 קריאות לשניה.
אבחון
צריך לזהות את מדיניות Spike Arrest שבה השגיאה התרחשה ואת שם הקובץ שאי אפשר לפתור אותו כמו שצריך. שני הפריטים האלה מופיעים ברכיב faultstring בתשובה לשגיאה.
לדוגמה, במחרוזת השגיאה הבאה, שם המדיניות הוא
SpikeArrest_AuthProxy
וההפניה היאrequest.header.rate
:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
בקובץ ה-XML של המדיניות Spike Arrest שנכשל, מוודאים ששם ההפניה שבה נעשה שימוש תואם לשם ההפניה שזוהה במחרוזת השגיאה (שלב 1 למעלה). ** **
לדוגמה, המדיניות הבאה מגדירה את האלמנט
עם ההפניה בשם request.header.rate
, שתואמת למה שמופיע ב-faultstring:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy"> <DisplayName>SpikeArrest_AuthProxy</DisplayName> <Properties/> <Identifier ref="request.header.some-header-name"/> <Rate ref="request.header.rate"/> </SpikeArrest>
קובעים אם המשתנה מוגדר וזמין בתהליך שבו מתבצעת המדיניות של Spike Arrest.
אם המשתנה הוא:
- מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מתבצעת) או
- לא ניתן לפתור (לא מוגדר)
אז זה הגורם לשגיאה.
בדוגמה שלמעלה, הערך של שיעור השהיות השיא ברכיב
<Rate>
אמור להיות מאוחזר מכותרת הבקשה שנקראת rate. עם זאת, Edge לא מצליח לפתור את השדה request.header.rate. זה קורה אם הכותרת rate לא מועברת כחלק מבקשת ה-API.לפניכם בקשת API לדוגמה שלא מעבירה את הכותרת rate כחלק מהבקשה:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
מכיוון שהכותרת rate לא מועברת כחלק מהבקשה, ההפניה request.header.rate שמופיעה ברכיב
<Rate>
במדיניות לעצירת התקפי התחברות לא מוגדרת, ולכן אי אפשר לפתור אותה. לכן תקבלו את קוד השגיאה:policies.ratelimit.FailedToResolveSpikeArrestRate
רזולוציה
מוודאים שהמשתנה שאליו מפנה האלמנט <Rate>
קיים/מוגדר וזמין בתהליך הספציפי שבו המדיניות של Spike Arrest מופעלת.
כדי לתקן את הדוגמה שלמעלה, אפשר לשנות את הבקשה כך שתכלול את הכותרת rate, כפי שמתואר בהמשך:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"