您正在查看 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 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 中識別的值相符,這就是發生錯誤的原因。
舉例來說,假設在 Spike 逮捕政策之前使用 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 次呼叫。
診斷
找出發生錯誤的尖峰流量防範政策,以及無法正確解析的參照名稱。您可以在錯誤回應的 errorstring 元素中找到這兩個項目。
例如,在下列錯誤字串中,政策名稱為
SpikeArrest_AuthProxy
,參照為request.header.rate
:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
在失敗的 Spike 逮捕政策 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"