查看 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 (非整數值),就會發生錯誤。
診斷
找出針對高點 (Spike) 中
<MessageWeight>
元素使用的無效值 逮捕政策。您可以在faultstring
錯誤回應。舉例來說,在以下錯誤中,<MessageWeight>
元素使用的無效值為1.5
:"faultstring": "Invalid message weight value 1.5"
請檢查發生失敗的特定 API Proxy 中,所有 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>
判斷所識別的「尖峰停止」政策在
<MessageWeight>
元素中使用的變數值。流程變數的值可以是 擷取自 HTTP 標頭、查詢參數、XML 或 JSON 要求酬載 或是其他政策中定義的定義- 在 API Proxy 中找出先定義變數的程式碼。
- 找到定義變數的政策後 請先檢查變數值的設定方式。
- 如果流量變數的值與在「步驟」中找到的值相符 #1 就是造成錯誤的原因。
舉例來說,假設 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 個呼叫。
診斷
找出發生錯誤的「尖峰流量防範」政策,以及 無法正確解析的參照。你可以找到這兩項資訊 錯誤回應的 faultstring 元素中。
例如,在下列錯誤字串中,政策名稱為
SpikeArrest_AuthProxy
,而參照為request.header.rate
:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
在失敗的急救逮捕政策 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>
確定變數是否已定義且可在 正在執行尖峰流量防範政策,
如果變數為以下任一變數:
- 超出範圍 (不適用於政策的特定流程 執行) 或
- 無法解析 (未定義)
則是錯誤的原因。
在上述範例中,
<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 標頭,因此參照 在上述尖峰流量中,元素
<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"