您目前查看的是 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
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 (非整數值),就會發生錯誤。
診斷
找出 SpikeArrest 政策中
<MessageWeight>元素使用的無效值。您可以在錯誤回應的faultstring元素中找到這項資訊。舉例來說,在下列錯誤中,<MessageWeight>元素使用的無效值為1.5:"faultstring": "Invalid message weight value 1.5"檢查發生失敗的特定 API Proxy 中的所有尖峰流量防護政策。可能有一或多項尖峰流量防護政策指定
<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>判斷所識別尖峰流量防護政策的
<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> 元素中含有費率設定的變數參照無法解析為 Spike Arrest 政策中的值,就會發生這個錯誤。這個元素為必要元素,用於以 {int}pm 或 {int}ps 形式指定尖峰抑制率。舉例來說,{int}pm 可能為 500pm,也就是每分鐘 500 次呼叫。同樣地,10ps 值表示每秒 10 次呼叫。
診斷
找出發生錯誤的 Spike Arrest 政策,以及無法正確解析的參照名稱。您可以在錯誤回應的 faultstring 元素中找到這兩項資訊。
舉例來說,在下列 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的參照設定元素,這與 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」的要求標頭擷取。不過,Apigee 無法解析 request.header.rate。如果標頭 rate 未做為 API 要求的一部分傳遞,就會發生這種情況。以下是未將 rate 標頭做為要求一部分傳遞的 API 要求範例:
curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json"
其中 your_host_alias 是用於存取 API 的公開網域,已在覆寫檔案的
virtualhosts.hostAliases屬性中設定。請參閱「指定設定覆寫」。由於標頭 rate 並未做為要求的一部分傳遞,因此上述 Spike Arrest 政策中元素
<Rate>使用的 request.header.rate 參照未定義,因此無法解析。因此您會收到錯誤代碼:policies.ratelimit.FailedToResolveSpikeArrestRate
解析度
請確認 <Rate> 元素中參照的變數存在/已定義,且可在執行 Spike Arrest 政策的特定流程中使用。
如要修正上述範例,可以修改要求,加入 rate 標頭,如下所示:
curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"
其中 your_host_alias 是用於存取 API 的公開網域,已在覆寫檔案的 virtualhosts.hostAliases 屬性中設定。請參閱「指定設定覆寫」。