您正在查看 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 (非整數值),就會發生錯誤。
診斷
- 找出 Spike Arrest 政策中 - <MessageWeight>元素使用的無效值。您可以在錯誤回應的- faultstring元素中找到這項資訊。舉例來說,在以下錯誤中,- <MessageWeight>元素使用的無效值為- 1.5:- "faultstring": "Invalid message weight value 1.5"
- 請檢查發生失敗的特定 API Proxy 中,所有 Spike Arrest 政策。您可能會有一或多項「尖峰封鎖」政策,其中指定了 - <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 Arrest 政策前使用 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 元素中找到這兩個項目。 - 例如,在以下錯誤字串中,政策名稱為 - SpikeArrest_AuthProxy,參照為- request.header.rate:- "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
- 在失敗的 Spike Arrest 政策 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>
- 判斷在執行 Spike Arrest 政策的流程中,是否已定義並可使用該變數。 
- 如果變數為: - 超出範圍 (在執行政策的特定流程中不可用),或
- 無法解析 (未定義)
 - 則表示這是錯誤的原因。 - 在上述範例中, - <Rate>元素中的尖峰偵測率值應從名為 rate 的要求標頭擷取。不過,Apigee 無法解析 request.header.rate。如果未將標頭 rate 做為 API 要求的一部分傳遞,就會發生這種情況。- 以下是範例 API 要求,其中未將標頭 rate 做為要求的一部分傳遞: - 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> 元素中參照的變數是否存在/已定義,且可在執行「尖峰流量截斷」政策的特定流程中使用。
如要修正上述範例,您可以修改要求,納入 rate 標頭,如下所示:
curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"
其中 your_host_alias 是用於存取 API 的公開網域,如覆寫檔案中的 virtualhosts.hostAliases 屬性所定義。請參閱「指定設定值覆寫值」。