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

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

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

    उदाहरण के लिए, गड़बड़ी की इस जानकारी में, नीति का नाम 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 नाम वाले रेफ़रंस के साथ एलिमेंट सेट करती है, जो फ़ॉल्टस्ट्रिंग में मौजूद एलिमेंट से मेल खाता है:

    <?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 को अनुरोध के हिस्से के तौर पर पास नहीं किया जाता है. इसलिए, ऊपर दी गई स्पाइक ऐरेस्ट नीति में एलिमेंट <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"