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

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

    उदाहरण के लिए, यह नीति <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 ऊपर दिया है, तो यही गड़बड़ी की वजह है.

    उदाहरण के लिए, मान लें कि Spike Arrest से पहले 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. स्पाइक अरेस्ट की नीति वाले एक्सएमएल फ़ीड में, पुष्टि करें कि इस्तेमाल किए गए रेफ़रंस का नाम, गड़बड़ी की स्ट्रिंग (ऊपर दिया गया पहला चरण) में बताए गए रेफ़रंस के नाम से मेल खाता हो. ** **

    उदाहरण के लिए, नीचे दी गई नीति, 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 को पास नहीं किया जाता है.

    यहां एपीआई अनुरोध का एक सैंपल दिया गया है, जो हेडर रेट को अनुरोध:

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

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

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

रिज़ॉल्यूशन

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

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

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