Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
InvalidMessageWeight
Hata kodu
policies.ratelimit.InvalidMessageWeight
Hata yanıtı gövdesi
{ "fault": {jdoe "faultstring": "Invalid message weight value [invalid_value]", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
Örnek Hata Mesajı
{
"fault": {
"faultstring": "Invalid message weight value 1.5",
"detail": {
"errorcode": "policies.ratelimit.InvalidMessageWeight"
}
}
}Neden
Bu hata, bir akış değişkeni aracılığıyla <MessageWeight> öğesi için belirtilen değer geçersizse (tamsayı olmayan bir değer) oluşur.
Örneğin, <MessageWeight> öğesi için belirtilen akış değişkeninin değeri 1,5 ise (tam sayı olmayan bir değer) hata oluşur.
Teşhis
SpikeArrest politikasında
<MessageWeight>öğesi için kullanılan geçersiz değeri belirleyin. Bu bilgileri hata yanıtınınfaultstringöğesinde bulabilirsiniz. Örneğin, aşağıdaki hatada<MessageWeight>öğesi için kullanılan geçersiz değer1.5'dir:"faultstring": "Invalid message weight value 1.5"Hatayı içeren API proxy'sindeki tüm Spike Arrest politikalarını inceleyin.
<MessageWeight>öğesinin belirtildiği bir veya daha fazla Spike Arrest politikası olabilir.Örneğin, aşağıdaki politika,
<MessageWeight>değerinimessage_weight:adlı bir akış değişkeni aracılığıyla belirtir.<?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>Belirlenen ani akım önleme politikalarının
<MessageWeight>öğesinde kullanılan değişkenin değerini belirleyin. Akış değişkeninin değeri HTTP üstbilgilerinden, sorgu parametrelerinden, bir XML veya JSON isteği yükünden çıkarılabilir ya da başka bir politikada tanımlanabilir.- Değişkenin ilk olarak tanımlandığı API proxy'sindeki kodu bulun.
- Değişkenin ilk olarak tanımlandığı ve doldurulduğu politikayı belirledikten sonra değişkenin değerinin nasıl ayarlandığını kontrol edin.
- Akış değişkeninin değeri, yukarıdaki 1. adımda tanımlanan değerle eşleşiyorsa hatanın nedeni budur.
Örneğin, istek yöntemine göre
message_weightdeğişkenini ayarlamak için Spike Arrest Policy'den önce bir JavaScript politikasının kullanıldığını varsayalım.var verb = context.getVariable("request.verb"); context.setVariable("message_weight", "1.5"); if (verb == 'POST') { context.setVariable("message_weight", "2"); }message_weightdeğişkeninin değerinin1.5olduğunu ve bunun geçersiz (tam sayı olmayan) bir değer olduğunu unutmayın.
Çözünürlük
MessageWeight öğesinin değerinin geçerli bir değer (tam sayı değeri) olduğundan emin olun.
Yukarıda gösterilen örneği düzeltmek için JavaScript'teki message_weight değişkeninin değerini bir tam sayı olacak şekilde değiştirebilirsiniz:
var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
context.setVariable("message_weight", "2");
}
FailedToResolveSpikeArrestRate
Hata kodu
policies.ratelimit.FailedToResolveSpikeArrestRate
Hata yanıtı gövdesi
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Örnek Hata Mesajı
{
"fault": {
"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy",
"detail": {
"errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
}
}
}Neden
Bu hata, <Rate> öğesindeki hız ayarını içeren değişkene yapılan referans, Spike Arrest politikasındaki bir değerle çözümlenemediğinde oluşur. Bu öğe zorunludur ve {int}pm veya {int}ps biçiminde ani artışları önleme oranını belirtmek için kullanılır. Örneğin, {int}pm 500pm olabilir. Bu, dakikada 500 çağrı anlamına gelir. Benzer şekilde, 10ps değeri saniyede 10 çağrı anlamına gelir.
Teşhis
Hataya neden olan ani artış önleme politikasını ve düzgün şekilde çözümlenemeyen referansın adını belirleyin. Bu öğelerin ikisini de hata yanıtının faultstring öğesinde bulabilirsiniz.
Örneğin, aşağıdaki faultstring'de politika adı
SpikeArrest_AuthProxy, referans iserequest.header.rate'dir:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"Başarısız olan ani artış engelleme politikası XML'sinde, kullanılan referansın adının hata dizesinde (yukarıdaki 1. adım) tanımlanan referans adıyla eşleştiğini doğrulayın. ** **
Örneğin, aşağıdaki politika,
öğesini request.header.rateadlı referansla ayarlar. Bu referans, hata dizesindekiyle eşleşir:<?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>Değişkenin, Spike Arrest politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılabilir olup olmadığını belirleyin.
Değişken şu durumlarda:
- kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözümlenemiyor (tanımlanmamış)
Bu durumda hatanın nedeni budur.
Yukarıdaki örnekte,
<Rate>öğesindeki ani artış engelleme oranı değerinin rate adlı istek başlığından alınması gerekir. Ancak Edge, request.header.rate değerini çözemiyor. Bu durum, rate başlığı API isteğinin bir parçası olarak iletilmezse meydana gelir.İsteğin bir parçası olarak oran üstbilgisini geçirmeyen örnek bir API isteğini aşağıda bulabilirsiniz:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"rate başlığı isteğin bir parçası olarak iletilmediğinden, yukarıdaki ani artış engelleme politikasındaki
<Rate>öğesinde kullanılan request.header.rate referansı tanımlanmamıştır ve bu nedenle çözümlenemez. Bu nedenle, şu hata kodunu alırsınız:policies.ratelimit.FailedToResolveSpikeArrestRate
Çözünürlük
<Rate> öğesinde referans verilen değişkenin, Spike Arrest politikasının yürütüldüğü akışta mevcut/tanımlanmış ve kullanılabilir olduğundan emin olun.
Yukarıda gösterilen örneği düzeltmek için isteği aşağıdaki gibi değiştirerek rate (oran) başlığını ekleyebilirsiniz:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"