स्पाइक अरेस्ट नीति से जुड़ी रनटाइम की गड़बड़ी से जुड़ी समस्या हल करना

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 है (यह पूरी संख्या नहीं है), तो गड़बड़ी होती है.

संक्रमण की जांच

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

    1. एपीआई प्रॉक्सी में उस कोड का पता लगाएं जहां वैरिएबल को पहली बार तय किया गया था.
    2. जब आपको यह पता चल जाए कि वैरिएबल को किस नीति में पहली बार तय किया गया है और उसमें वैल्यू भरी गई है, तो देखें कि वैरिएबल के लिए वैल्यू कैसे सेट की गई है.
    3. अगर फ़्लो वैरिएबल की वैल्यू, ऊपर दिए गए पहले चरण में पहचानी गई वैल्यू से मेल खाती है, तो इसका मतलब है कि गड़बड़ी इसी वजह से हुई है.

    उदाहरण के लिए, मान लें कि अनुरोध के तरीके के आधार पर वैरिएबल message_weight को सेट करने के लिए, स्पाइक अरेस्ट नीति से पहले JavaScript नीति का इस्तेमाल किया जाता है. इसे यहां दिखाया गया है:

    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");
}

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> एलिमेंट में मौजूद, दर की सेटिंग वाले वैरिएबल के रेफ़रंस को स्पाइक अरेस्ट की नीति के तहत किसी वैल्यू में नहीं बदला जा सकता. यह एलिमेंट ज़रूरी है. इसका इस्तेमाल, {int}pm या {int}ps के तौर पर स्पाइक अरेस्ट रेट तय करने के लिए किया जाता है. उदाहरण के लिए, {int}pm की वैल्यू 500pm हो सकती है. इसका मतलब है कि हर मिनट 500 कॉल किए जा सकते हैं. इसी तरह, 10ps वैल्यू का मतलब है कि हर सेकंड में 10 कॉल किए जा सकते हैं.

संक्रमण की जांच

  1. उस स्पाइक अरेस्ट नीति का पता लगाएं जिसमें गड़बड़ी हुई है. साथ ही, उस रेफ़रंस का नाम पता लगाएं जिसे ठीक से हल नहीं किया जा सका. आपको ये दोनों आइटम, गड़बड़ी के जवाब के faultstring एलिमेंट में मिल सकते हैं.

    उदाहरण के लिए, यहां दिए गए faultstring में, नीति का नाम SpikeArrest_AuthProxy है और रेफ़रंस request.header.rate है:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. स्पाइक अरेस्ट की नीति का उल्लंघन करने वाली एक्सएमएल फ़ाइल में, पुष्टि करें कि इस्तेमाल किए गए रेफ़रंस का नाम, फ़ॉल्ट स्ट्रिंग (ऊपर दिया गया पहला चरण) में पहचाने गए रेफ़रंस के नाम से मेल खाता हो. ** **

    उदाहरण के लिए, यहां दी गई नीति, एलिमेंट को 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>
    
    
  3. यह तय करता है कि जिस फ़्लो में स्पाइक अरेस्ट नीति लागू की जा रही है उसमें वैरिएबल को तय किया गया है और वह उपलब्ध है या नहीं.

  4. अगर वैरिएबल की वैल्यू इनमें से कोई एक है:

    • स्कोप से बाहर है (उस फ़्लो में उपलब्ध नहीं है जहां नीति लागू की जा रही है) या
    • हल नहीं किया जा सकता (तय नहीं किया गया है)

    तो यह गड़बड़ी की वजह है.

    ऊपर दिए गए उदाहरण में, <Rate> एलिमेंट में स्पाइक अरेस्ट रेट की वैल्यू, rate नाम के अनुरोध हेडर से ली जानी चाहिए. हालांकि, Edge request.header.rate को हल नहीं कर सकता. ऐसा तब होता है, जब एपीआई अनुरोध के हिस्से के तौर पर rate हेडर नहीं भेजा जाता है.

    यहां एपीआई अनुरोध का एक सैंपल दिया गया है. इसमें अनुरोध के हिस्से के तौर पर, हेडर rate को पास नहीं किया गया है:

        curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
    

    अनुरोध के हिस्से के तौर पर, rate हेडर को पास नहीं किया गया है. इसलिए, ऊपर दी गई SpikeArrest नीति में मौजूद एलिमेंट <Rate> में इस्तेमाल किया गया रेफ़रंस request.header.rate तय नहीं किया गया है. इसलिए, इसे हल नहीं किया जा सकता. इसलिए, आपको गड़बड़ी का यह कोड मिलेगा:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

रिज़ॉल्यूशन

पक्का करें कि <Rate> एलिमेंट में रेफ़र किया गया वैरिएबल मौजूद हो/तय किया गया हो और उस फ़्लो में उपलब्ध हो जहां स्पाइक अरेस्ट नीति लागू की जा रही है.

ऊपर दिए गए उदाहरण को ठीक करने के लिए, अनुरोध में बदलाव किया जा सकता है. इसके लिए, नीचे दिए गए तरीके से rate हेडर शामिल करें:

curl -v  http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"