স্পাইক অ্যারেস্ট নীতি রানটাইম ত্রুটি সমস্যা সমাধান

আপনি 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. নির্দিষ্ট API প্রক্সিতে সমস্ত স্পাইক অ্যারেস্ট নীতি পরীক্ষা করুন যেখানে ব্যর্থতা ঘটেছে। এক বা একাধিক স্পাইক অ্যারেস্ট নীতি থাকতে পারে যেখানে <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. চিহ্নিত স্পাইক অ্যারেস্ট পলিসি(ies)-এর <MessageWeight> উপাদানে ব্যবহৃত ভেরিয়েবলের মান নির্ধারণ করুন। ফ্লো ভেরিয়েবলের মান HTTP শিরোনাম, ক্যোয়ারী প্যারামিটার, একটি XML বা JSON অনুরোধ পেলোড থেকে বের করা যেতে পারে বা অন্য নীতিতে সংজ্ঞায়িত করা যেতে পারে।

    1. API প্রক্সির মধ্যে কোডটি সনাক্ত করুন, যেখানে ভেরিয়েবলটি প্রথমে সংজ্ঞায়িত করা হয়েছিল।
    2. একবার আপনি যে নীতিতে ভেরিয়েবলকে সংজ্ঞায়িত করা হয়েছে এবং প্রথমে পপুলেট করা হয়েছে তা বের করার পরে, ভেরিয়েবলের মান কীভাবে সেট করা হয়েছে তা পরীক্ষা করুন।
    3. যদি ফ্লো ভেরিয়েবলের মান উপরের ধাপ # 1 এ চিহ্নিত মানের সাথে মেলে, তাহলে এটি ত্রুটির কারণ।

    উদাহরণস্বরূপ, অনুমান করুন যে স্পাইক অ্যারেস্ট নীতির আগে একটি জাভাস্ক্রিপ্ট নীতি ব্যবহার করা হয়েছে নীচের দেখানো অনুরোধ পদ্ধতির উপর ভিত্তি করে পরিবর্তনশীল 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 উপাদানের মান একটি বৈধ মান (পূর্ণসংখ্যা মান)।

উপরে দেখানো উদাহরণটি সংশোধন করতে, আপনি জাভাস্ক্রিপ্টে ভেরিয়েবল message_weight এর মানটিকে পূর্ণসংখ্যা হিসাবে পরিবর্তন করতে পারেন:

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

স্পাইক অ্যারেস্ট রেট সমাধান করতে ব্যর্থ হয়েছে৷

ত্রুটি কোড

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. ব্যর্থ স্পাইক অ্যারেস্ট পলিসি XML-এ, যাচাই করুন যে ব্যবহৃত রেফারেন্সের নাম ফল্ট স্ট্রিং-এ চিহ্নিত রেফারেন্স নামের সাথে মেলে (উপরে ধাপ #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> এলিমেন্টে স্পাইক অ্যারেস্ট রেট এর মান রেটে নামের রিকোয়েস্ট হেডার থেকে পুনরুদ্ধার করার কথা। যাইহোক, এজ request.header.rate সমাধান করতে অক্ষম। API অনুরোধের অংশ হিসাবে হেডার রেট পাস না হলে এটি ঘটে।

    এখানে একটি নমুনা API অনুরোধ যা অনুরোধের অংশ হিসাবে হেডার রেট পাস করে না:

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

    যেহেতু হেডার রেট অনুরোধের অংশ হিসেবে পাস করা হয়নি, তাই উপরের স্পাইক অ্যারেস্ট নীতিতে <Rate> এলিমেন্টে ব্যবহৃত রেফারেন্স request.header.rate অনির্ধারিত এবং তাই সমাধান করা যাবে না। সুতরাং আপনি ত্রুটি কোড পাবেন:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

রেজোলিউশন

নিশ্চিত করুন যে <Rate> উপাদানে উল্লেখ করা পরিবর্তনশীলটি বিদ্যমান/সংজ্ঞায়িত এবং নির্দিষ্ট প্রবাহে উপলব্ধ, যেখানে স্পাইক অ্যারেস্ট নীতি কার্যকর করা হচ্ছে।

উপরে দেখানো উদাহরণটি সংশোধন করতে, আপনি নীচে দেখানো হিসাবে হার শিরোনাম অন্তর্ভুক্ত করার অনুরোধটি সংশোধন করতে পারেন:

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