Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. info
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 (tam sayı olmayan bir değer) 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 tanımlayın. 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
'tır:"faultstring": "Invalid message weight value 1.5"
Hatanın gerçekleştiği ilgili API Proxy'sinde tüm Spike Arrest politikalarını inceleyin.
<MessageWeight>
öğesinin belirtildiği bir veya daha fazla ani artış durdurma 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 Spike Sabıka Politikası'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ü verisinden ayıklanabilir ya da başka bir politikada tanımlanabilir.- Değişkenin ilk olarak tanımlandığı API proxy'sinde 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,
message_weight
değişkenini istek yöntemine göre ayarlamak için Spike Arrest Politikası'ndan önce bir JavaScript politikasının kullanıldığını varsayalım. Bu politika aşağıdaki gibidir: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ğerinin1.5
olduğ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'te 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>
öğesinde ücret ayarını içeren değişkene yapılan referans, Spike Arrest politikasındaki bir değere çözülemiyorsa 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
değeri 500pm
, yani dakikada 500 çağrı olabilir. Benzer şekilde, 10ps
değeri saniye başına 10 arama anlamına gelir.
Teşhis
Hatanın oluştuğu Spike Arrest politikasını ve düzgün şekilde çözülemeyen referansın adını belirleyin. Bu öğelerin ikisini de hata yanıtının faultstring öğ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 politikası XML'inde, kullanılan referansın 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
öğesini request.header.rate
adlı referansla ayarlar. Bu referans, hata dizesindeki değerle 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ışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
- çözülemez (tanımlanmamıştır)
hatanın nedeni budur.
Yukarıda gösterilen örnekte,
<Rate>
öğesindeki ani 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, rate başlığı API isteği kapsamında iletilmediği takdirde ortaya çıkar.İsteğin bir parçası olarak rate üst bilgisini iletmeyen örnek bir API isteği:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
Rate başlığı istek kapsamında iletilmediğinden, yukarıdaki Spike Arrest politikasındaki
<Rate>
öğesinde kullanılan request.header.rate referansı tanımlanmamıştır ve bu nedenle çözülemez. Bu durumda şu hata kodunu alırsınız:policies.ratelimit.FailedToResolveSpikeArrestRate
Çözünürlük
<Rate>
öğesinde atıfta bulunulan değişkenin, ani artış durdurma 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"