מוצג המסמך של Apigee Edge.
כניסה למסמכי העזרה של Apigee X. info
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, מפרמטרים של שאילתות, ממטען ייעודי (payload) של בקשת XML או JSON, או מוגדר במדיניות אחרת.- מחפשים את הקוד בשרת ה-proxy ל-API, שבו המשתנה הוגדר קודם.
- אחרי שהבנתם את המדיניות שבה מוגדר המשתנה, קודם כול, בודקים איך מוגדר ערך המשתנה.
- אם הערך של משתנה הזרימה תואם לערך שזוהה בשלב בשלב 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>
לערך במדיניות של Spike Arrest. הרכיב הזה הוא חובה ומשמש לציון שיעור השהיות השיא ב-
בפורמט {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>
החליטו אם המשתנה מוגדר וזמין בתהליך שבו המדיניות בנושא מעצרת ספייק מיושמת.
אם המשתנה הוא:
- לא בהיקף (לא זמין בתהליך הספציפי שבו המדיניות מיושמת לביצוע) או
- לא ניתן לפתרון (לא מוגדר)
זאת הסיבה לשגיאה.
בדוגמה שלמעלה, הערך של שיעור עצירות העלייה החדה במדד
<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"
מכיוון ששיעור הכותרת לא מועבר כחלק מהבקשה, יש לציין request.header.rate משמש ברכיב
<Rate>
ב-Spke שלמעלה המדיניות בנושא מעצר לא מוגדרת ולכן לא ניתן לפתור אותה. לכן תקבלו את קוד השגיאה: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"