פתרון בעיות בזמן ריצה של מכסה

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

InvalidMessageWeight

קוד שגיאה

policies.ratelimit.InvalidMessageWeight

גוף התגובה לשגיאה

{
    "fault": {
        "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 (ערך שאינו מספר שלם).

אבחון

  1. מזהים את הערך הלא חוקי שנעשה בו שימוש ברכיב <MessageWeight> במדיניות המכסה. המידע הזה מופיע ברכיב faultstring של תגובת השגיאה. לדוגמה, בשגיאה הבאה, הערך הלא חוקי ששימש לרכיב <MessageWeight> הוא 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. בודקים את כל כללי המדיניות בנושא מכסות בשרת ה-proxy הספציפי של ה-API שבו אירעה התקלה. יכול להיות שיש מדיניות אחת או יותר של Quota שבה מצוין הרכיב <MessageWeight>.

    לדוגמה, המדיניות הבאה מציינת את <MessageWeight>דרך משתנה תהליךmessage_weight:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="Quota_with_weight" type="calendar">
        <DisplayName>Quota_with_weight</DisplayName>
        <Properties/>
        <Allow count="3"/>
        <Interval>1</Interval>
        <TimeUnit>minute</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
        <MessageWeight ref="message_weight"/>
    </Quota>
    
  3. קובעים את הערך של המשתנה שמשמש עבור <MessageWeight> במדיניות המכסות שזוהו. אפשר לחלץ את הערך של משתנה התהליך מכותרות HTTP, מפרמטרים של שאילתות, ממטען ייעודי (payload) של בקשת XML או JSON או להגדיר אותו במדיניות אחרת:

    1. מחפשים את הקוד בתוך חבילת ה-proxy של ה-API, שבו המשתנה הוגדר קודם.
    2. אחרי שמוצאים את המדיניות שבה המשתנה מוגדר ומאוכלס קודם, בודקים איך הערך של המשתנה מוגדר.
    3. אם הערך של משתנה התהליך תואם לערך שזוהה בשלב 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");
}

FailedToResolveQuotaIntervalReference

קוד שגיאה

policies.ratelimit.FailedToResolveQuotaIntervalReference

גוף התגובה לשגיאה

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

דוגמה להודעת שגיאה

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference api.product.developer.quota.interval in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

סיבה

השגיאה הזו מתקבלת אם הרכיב <Interval> לא מוגדר במדיניות המכסות. הרכיב הזה הוא חובה ומשמש לציון מרווח הזמן החלה על המכסה. מרווח הזמן יכול להיות דקות, שעות, ימים, שבועות או חודשים, כפי שמוגדר באמצעות הרכיב <TimeUnit>.

אבחון

  1. בודקים כל אחת ממדיניות המכסות בשרת ה-API שבאמצעותו התרחשה התקלה. אם יש מדיניות מכסה כלשהי שבה רכיב החובה <Interval> לא מוגדר, זו הסיבה לשגיאה.

    לדוגמה, מדיניות המכסות הבאה לא כוללת את רכיב החובה <Interval>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
        <DisplayName>CheckQuota</DisplayName>
        <Properties/>
        <Allow count="3"/>
            <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    מכיוון שרכיב החובה <TimeUnit> לא מוגדר במדיניות המכסה שלמעלה, תקבלו את קוד השגיאה:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

רזולוציה

צריך לוודא שכל כללי מדיניות המכסות של שרת proxy מסוים ל-API כוללים את רכיב החובה <Interval> שמוגדר כמו שצריך.

כדי לתקן את הדוגמה שלמעלה, אפשר לשנות את המדיניות כך שתכלול את הרכיב <Interval> כמו שמוצג בהמשך.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>

FailedToResolveQuotaIntervalTimeUnitReference

קוד שגיאה

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

גוף התגובה לשגיאה

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

דוגמה להודעת שגיאה

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference apiproduct.developer.quota.timeunity in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

סיבה

השגיאה הזו מתקבלת אם הרכיב <TimeUnit> לא מוגדר במדיניות המכסה. הרכיב הזה הוא חובה ומשמש לציון יחידת הזמן החלה על המכסה. מרווח הזמן יכול להיות דקות, שעות, ימים, שבועות או חודשים.

אבחון

  1. לבדוק כל אחד מכללי המדיניות בנושא מכסות ב-proxy ל-API שבו התרחש הכשל. אם יש מדיניות מכסה כלשהי שבה רכיב החובה <TimeUnit> לא מוגדר, זו הסיבה לשגיאה.

    לדוגמה, מדיניות המכסות הבאה לא כוללת את רכיב החובה <TimeUnit>:

    <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
      <DisplayName>CheckQuota</DisplayName>
      <Properties/>
      <Allow count="3"/>
          <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
      <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    מכיוון שרכיב החובה <TimeUnit> לא מוגדר במדיניות המכסה שלמעלה, תקבלו את קוד השגיאה:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

רזולוציה

צריך לוודא שבכל כללי מדיניות המכסות של שרת proxy מסוים ל-API מוגדר רכיב החובה <TimeUnit>.

כדי לתקן את הדוגמה שלמעלה, אפשר לשנות את המדיניות כך שתכלול את הרכיב <TimeUnit> כמו שמוצג בהמשך.

<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>