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, <MessageWeight>
öğesi için bir akış değişkeniyle belirtilen değer geçersiz (tam sayı olmayan bir değer) ise ortaya çıkar.
Örneğin, <MessageWeight>
öğesi için belirtilen akış değişkeninin değeri 1,5 (tam sayı olmayan bir değer) ise hata meydana gelir.
Teşhis
Spike Arrest 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
şeklindedir:"faultstring": "Invalid message weight value 1.5"
Hatanın gerçekleştiği ilgili API Proxy'sinde bulunan 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
message_weight:
adlı bir akış değişkeni aracılığıyla<MessageWeight>
değerini 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>
Tanımlanan Spike Arrest Politikalarının
<MessageWeight>
öğesinde kullanılan değişkenin değerini belirleyin. Akış değişkeninin değeri; HTTP üst bilgilerinden, sorgu parametrelerinden, XML veya JSON istek yükünden çıkarılabilir ya da başka bir politikada tanımlanabilir.- Değişkenin ilk olarak tanımlandığı API proxy'sinde kodu bulun.
- Önce değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, değişken değerinin nasıl ayarlandığını kontrol edin.
- Akış değişkeninin değeri, yukarıdaki 1. Adım'da tanımlanan değerle eşleşiyorsa hatanın nedeni budur.
Örneğin, aşağıda gösterildiği gibi istek yöntemine göre
message_weight
değişkenini ayarlamak için Spike Arrest Politikası'ndan ö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_weight
değişkeninin değerinin, geçersiz (tam sayı olmayan) bir değer olan1.5
olduğuna dikkat edin.
Çö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 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 ücret ayarını içeren değişkene referans, Spike Arrest politikasındaki bir değere çözümlenemezse ortaya çıkar. Bu öğe zorunludur ve artış durdurma oranını {int}pm
veya {int}ps
biçiminde belirtmek için kullanılır. Örneğin {int}pm
, 500pm
yani dakikada 500 çağrı olabilir. Benzer şekilde, 10ps
değeri saniyede 10 çağrı anlamına gelir.
Teşhis
Hatanın oluştuğu Spike Arrest politikasını ve doğru şekilde çözümlenemeyen referansın adını belirleyin. Bu öğelerin ikisini de hata yanıtının hata dizesi öğesinde bulabilirsiniz.
Örneğin, aşağıdaki hata dizesinde politika adı
SpikeArrest_AuthProxy
ve referansrequest.header.rate
'tır:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
Başarısız Spike Arrest politika XML'inde, kullanılan referans adının hata dizesinde tanımlanan referans adıyla eşleştiğini doğrulayın (yukarıdaki 1. adım). **
Örneğin, aşağıdaki politika, hata dizesindekiyle eşleşen
request.header.rate
referanslıöğesini ayarlar: <?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 tanımlanmış ve başlangıç noktası politikasının yürütülmekte olduğu akışta tanımlanmış olup olmadığını belirleyin.
Değişken şunlardan biriyse:
- kapsam dışındadır (politikanın uygulandığı belirli akışta kullanılamaz) veya
- çözülemiyor (tanımlanmadı)
hatanın nedeni budur.
Yukarıda gösterilen örnekte,
<Rate>
öğesindeki artış durdurma oranının değerinin rate adlı istek başlığından alınması gerekir. Ancak Edge, request.header.rate sorununu çözemez. Bu durum, ücret başlığı API isteği kapsamında iletilmezse meydana gelir.Aşağıda, isteğin bir parçası olarak rate başlığını iletmeyen bir API isteği örneği verilmiştir:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
İstek kapsamında başlık ücret iletilmediğinden, yukarıdaki Artış Arrest politikasındaki
<Rate>
öğesinde kullanılan request.header.rate referansı tanımlanmamıştır ve bu nedenle çözülemez. Şu hata kodunu alırsınız:policies.ratelimit.FailedToResolveSpikeArrestRate
Çözünürlük
<Rate>
öğesinde başvurulan değişkenin, Spike Arrest politikasının yürütüldüğü belirli 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ğıda gösterildiği gibi rate başlığını içerecek şekilde değiştirebilirsiniz:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"