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

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

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> एलिमेंट के बारे में बताया गया हो.

    उदाहरण के लिए, यह नीति message_weight: नाम के फ़्लो वैरिएबल के ज़रिए, <MessageWeight> की वैल्यू के बारे में बताती है

    <?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. अगर फ़्लो वैरिएबल की वैल्यू, ऊपर दिए गए चरण #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");
}

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

    उदाहरण के लिए, नीचे दी गई गड़बड़ी वाली स्ट्रिंग में नीति का नाम SpikeArrest_AuthProxy है और रेफ़रंस request.header.rate है:

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

    उदाहरण के लिए, यह नीति request.header.rate नाम वाले एलिमेंट को सेट करती है, जो गड़बड़ी वाली स्ट्रिंग से मेल खाता है:

    <?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> एलिमेंट में इस्तेमाल किए गए 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"