আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
অবৈধ বার্তা ওজন
ত্রুটি কোড
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 (একটি অ-পূর্ণসংখ্যা) হয়, তাহলে ত্রুটিটি ঘটে।
রোগ নির্ণয়
স্পাইক অ্যারেস্ট পলিসিতে
<MessageWeight>এলিমেন্টের জন্য ব্যবহৃত অবৈধ মানটি শনাক্ত করুন। আপনি এই তথ্যটি এরর রেসপন্সেরfaultstringএলিমেন্টে খুঁজে পেতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত এররটিতে,<MessageWeight>এলিমেন্টের জন্য ব্যবহৃত অবৈধ মানটি হলো1.5:"faultstring": "Invalid message weight value 1.5"যে নির্দিষ্ট এপিআই প্রক্সিতে ব্যর্থতাটি ঘটেছে, সেখানকার সমস্ত স্পাইক অ্যারেস্ট পলিসি পরীক্ষা করুন। সেখানে এক বা একাধিক স্পাইক অ্যারেস্ট পলিসি থাকতে পারে যেখানে
<MessageWeight>এলিমেন্টটি নির্দিষ্ট করা আছে।উদাহরণস্বরূপ, নিম্নলিখিত পলিসিটি `message_weight` নামক একটি ফ্লো ভেরিয়েবলের মাধ্যমে
<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>শনাক্তকৃত স্পাইক অ্যারেস্ট পলিসি(গুলো)-র
<MessageWeight>এলিমেন্টে ব্যবহৃত ভ্যারিয়েবলের মান নির্ধারণ করুন। ফ্লো ভ্যারিয়েবলের মান HTTP হেডার, কোয়েরি প্যারামিটার, একটি XML বা JSON রিকোয়েস্ট পেলোড থেকে সংগ্রহ করা যেতে পারে, অথবা অন্য কোনো পলিসিতে সংজ্ঞায়িত করা থাকতে পারে।- এপিআই প্রক্সির মধ্যে সেই কোডটি খুঁজুন, যেখানে ভেরিয়েবলটি প্রথম সংজ্ঞায়িত করা হয়েছিল।
- প্রথমে যে পলিসিতে ভেরিয়েবলটি সংজ্ঞায়িত ও পূরণ করা হয়েছে, তা জেনে নেওয়ার পর, ভেরিয়েবলটির মান কীভাবে সেট করা হয়েছে তা পরীক্ষা করুন।
- যদি ফ্লো ভেরিয়েবলের মান উপরের ধাপ #১-এ চিহ্নিত মানের সাথে মিলে যায়, তাহলে সেটাই ত্রুটির কারণ।
উদাহরণস্বরূপ, ধরে নিন যে স্পাইক অ্যারেস্ট পলিসির আগে একটি জাভাস্ক্রিপ্ট পলিসি ব্যবহার করা হয়, যা নিচে দেখানো অনুযায়ী রিকোয়েস্ট মেথডের উপর ভিত্তি করে
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 ভেরিয়েবলের মান পরিবর্তন করে একটি পূর্ণসংখ্যা (integer) করতে পারেন:
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 , যার অর্থ প্রতি মিনিটে ৫০০টি কল। একইভাবে, 10ps ভ্যালুটির অর্থ প্রতি সেকেন্ডে ১০টি কল।
রোগ নির্ণয়
যে স্পাইক অ্যারেস্ট পলিসিতে ত্রুটিটি ঘটেছে তা শনাক্ত করুন এবং যে রেফারেন্সটি সঠিকভাবে সমাধান করা যাচ্ছে না তার নাম খুঁজে বের করুন। আপনি এই দুটি আইটেমই এরর রেসপন্সের ফল্টস্ট্রিং (faultstring) এলিমেন্টে খুঁজে পাবেন।
উদাহরণস্বরূপ, নিম্নলিখিত ফল্টস্ট্রিং-এ, পলিসির নাম হল
SpikeArrest_AuthProxyএবং রেফারেন্সটি হলrequest.header.rate:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"ব্যর্থ স্পাইক অ্যারেস্ট পলিসি XML-এ, যাচাই করুন যে ব্যবহৃত রেফারেন্সের নামটি ফল্ট স্ট্রিং-এ (উপরের ধাপ #১) চিহ্নিত রেফারেন্স নামের সাথে মেলে কিনা।
উদাহরণস্বরূপ, নিম্নলিখিত নীতিটি নির্ধারণ করে
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>যে ফ্লো-তে স্পাইক অ্যারেস্ট পলিসিটি কার্যকর করা হচ্ছে, সেখানে ভ্যারিয়েবলটি সংজ্ঞায়িত এবং উপলব্ধ আছে কিনা তা নির্ধারণ করুন।
যদি ভেরিয়েবলটি হয়:
- আওতার বাইরে (যে নির্দিষ্ট কার্যপ্রবাহে নীতিমালাটি কার্যকর করা হচ্ছে সেখানে উপলব্ধ নয়) অথবা
- সমাধান করা যাচ্ছে না (সংজ্ঞায়িত নয়)
তাহলে এটাই ত্রুটির কারণ।
উপরে দেখানো উদাহরণে,
<Rate>এলিমেন্টের স্পাইক অ্যারেস্ট রেট-এর মানটি rate নামের রিকোয়েস্ট হেডার থেকে নেওয়ার কথা। কিন্তু, Edge request.header.rate রিজলভ করতে পারছে না। এমনটা ঘটে যদি API রিকোয়েস্টের অংশ হিসেবে rate হেডারটি পাস করা না হয়।এখানে একটি নমুনা এপিআই অনুরোধ দেওয়া হলো, যেখানে অনুরোধের অংশ হিসেবে ' রেট' হেডারটি পাঠানো হয় না:
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"