คุณกำลังดูเอกสารประกอบ 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 (ค่าที่ไม่ใช่จำนวนเต็ม) เกิดข้อผิดพลาด
การวินิจฉัย
ระบุค่าที่ไม่ถูกต้องสำหรับองค์ประกอบ
<MessageWeight>
ในช่วงที่เพิ่มขึ้น นโยบายการจับกุม คุณดูข้อมูลนี้ได้ในองค์ประกอบfaultstring
ของคำตอบเกี่ยวกับข้อผิดพลาด ตัวอย่างเช่น ในข้อผิดพลาดต่อไปนี้ ค่าที่ไม่ถูกต้องที่ใช้สำหรับองค์ประกอบ<MessageWeight>
คือ1.5
"faultstring": "Invalid message weight value 1.5"
ตรวจสอบนโยบายการหยุดการเพิ่มขึ้นทั้งหมดในพร็อกซี API ที่เฉพาะเจาะจงซึ่งเกิดข้อผิดพลาด อาจมีนโยบาย Spike Arrest อย่างน้อย 1 ข้อที่ มีการระบุองค์ประกอบ
<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>
ระบุค่าของตัวแปรที่ใช้ในองค์ประกอบ
<MessageWeight>
ของ นโยบายการจับกุมกระหน่ำที่ระบุไว้ ค่าของตัวแปรการไหลสามารถดึงมาจากส่วนหัว HTTP, พารามิเตอร์การค้นหา, พารามิเตอร์ของคำขอ XML หรือ JSON หรือกำหนดไว้ในนโยบายอื่น- ค้นหาโค้ดภายในพร็อกซี API ที่กําหนดตัวแปรไว้ก่อน
- เมื่อคุณทราบถึงนโยบายที่มีการกำหนดตัวแปรและ ในตอนแรก ให้ตรวจสอบว่าได้กำหนดค่าสำหรับตัวแปรอย่างไร
- หากค่าของตัวแปรโฟลว์ตรงกับค่าที่ระบุไว้ในขั้นตอน #1 ข้างต้น นั่นเป็นสาเหตุของข้อผิดพลาด
ตัวอย่างเช่น สมมติว่ามีการใช้นโยบาย JavaScript ก่อนเหตุการณ์การจับกุม Spike Arrest นโยบายที่จะตั้งค่าตัวแปร
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
ใน JavaScript ให้เป็นจำนวนเต็มได้ดังนี้
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>
ไม่สามารถจับคู่เป็นค่าภายในการจับกุมของ Spike Arrest
องค์ประกอบนี้ต้องระบุและใช้เพื่อระบุอัตราการหยุดการเพิ่มขึ้นอย่างฉับพลันในรูปแบบ {int}pm
หรือ {int}ps
เช่น {int}pm
อาจเป็น 500pm
ซึ่งก็คือ 500 ครั้งต่อนาที เช่นเดียวกัน ค่า 10ps
หมายถึงการโทร 10 ครั้งต่อ
อย่างที่สอง
การวินิจฉัย
ระบุนโยบายการจับจองวัตถุดิบที่เกิดข้อผิดพลาดและชื่อของ ข้อมูลอ้างอิงที่ไม่สามารถระบุได้อย่างถูกต้อง คุณจะพบรายการทั้ง 2 รายการนี้ ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด
ตัวอย่างเช่น ในสตริงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ
SpikeArrest_AuthProxy
และข้อมูลอ้างอิงคือrequest.header.rate
"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
ใน XML ของนโยบาย Spike Arrest ที่ล้มเหลว ให้ยืนยันว่าชื่อของข้อมูลอ้างอิง ที่ใช้ ตรงกับชื่ออ้างอิงที่ระบุในสตริงข้อผิดพลาด (ขั้นตอนที่ 1 ด้านบน) ** **
ตัวอย่างเช่น นโยบายต่อไปนี้ตั้งค่าองค์ประกอบ
ที่มีการอ้างอิง ชื่อ 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 ไม่ได้ สิ่งนี้เกิดขึ้น หากไม่มีการส่ง rate ส่วนหัวเป็นส่วนหนึ่งของคำขอ APIต่อไปนี้คือตัวอย่างคำขอ API ที่ไม่ผ่าน rate ส่วนหัวโดยเป็นส่วนหนึ่งของ คำขอ
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
เนื่องจากคำขอไม่ได้ส่ง rate ส่วนหัวเป็นส่วนหนึ่งของคำขอ request.header.rate ที่ใช้ในองค์ประกอบ
<Rate>
ในช่วง Spike ด้านบน ไม่มีการระบุนโยบายการจับกุม จึงไม่สามารถแก้ไขได้ ดังนั้นคุณจะได้รับ รหัสข้อผิดพลาด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"