कोटा रनटाइम की गड़बड़ी ठीक करना

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. उस एपीआई प्रॉक्सी में सभी कोटा नीतियों की जांच करें जहां गड़बड़ी हुई है. एक या उससे ज़्यादा कोटा नीतियां हो सकती हैं, जिनमें <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> के लिए इस्तेमाल किए गए वैरिएबल की वैल्यू तय करें. फ़्लो वैरिएबल की वैल्यू एचटीटीपी हेडर, क्वेरी पैरामीटर, एक्सएमएल या JSON अनुरोध पेलोड से या किसी दूसरी नीति में तय की जा सकती है:

    1. एपीआई प्रॉक्सी बंडल में वह कोड ढूंढें जहां सबसे पहले वैरिएबल तय किया गया था.
    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 को दिखाने वाली वैल्यू, एक मान्य वैल्यू (इंटीजर वैल्यू) है.

ऊपर दिखाए गए उदाहरण को ठीक करने के लिए, JavaScript में message_weight वैरिएबल की वैल्यू को पूर्णांक में बदला जा सकता है.

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. एपीआई प्रॉक्सी में हर उस कोटा नीति की जांच करें जहां गड़बड़ी हुई. अगर कोई ऐसी कोटा नीति है जिसमें ज़रूरी एलिमेंट <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
    

रिज़ॉल्यूशन

यह पक्का करें कि दिए गए एपीआई प्रॉक्सी के लिए सभी कोटा नीतियों में, ज़रूरी एलिमेंट <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. एपीआई प्रॉक्सी में हर उस कोटा नीति की जांच करें जहां गड़बड़ी हुई. अगर कोई ऐसी कोटा नीति है जिसमें ज़रूरी एलिमेंट <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
    

रिज़ॉल्यूशन

यह पक्का करें कि दिए गए एपीआई प्रॉक्सी के लिए सभी कोटा नीतियों में, ज़रूरी एलिमेंट <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>