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

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>