Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
InvalidMessageWeight
Kod błędu
policies.ratelimit.InvalidMessageWeight
Treść odpowiedzi na błąd
{ "fault": {jdoe "faultstring": "Invalid message weight value [invalid_value]", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
Przykładowy komunikat o błędzie
{
"fault": {
"faultstring": "Invalid message weight value 1.5",
"detail": {
"errorcode": "policies.ratelimit.InvalidMessageWeight"
}
}
}Przyczyna
Ten błąd występuje, jeśli wartość określona dla elementu <MessageWeight> za pomocą zmiennej przepływu jest nieprawidłowa (wartość niebędąca liczbą całkowitą).
Jeśli na przykład wartość zmiennej przepływu określonej dla elementu <MessageWeight> jest równa 1, 5 (wartość niecałkowita), wystąpi błąd.
Diagnostyka
Określ nieprawidłową wartość używaną w elemencie
<MessageWeight>w zasadach SpikeArrest. Te informacje znajdziesz w elemenciefaultstringodpowiedzi na błąd. Na przykład w tym błędzie nieprawidłowa wartość użyta w elemencie<MessageWeight>to1.5:"faultstring": "Invalid message weight value 1.5"Sprawdź wszystkie zasady Spike Arrest w konkretnym serwerze proxy interfejsu API, w którym wystąpił błąd. Może istnieć co najmniej 1 zasada ochrony przed nagłymi wzrostami, w której określony jest element
<MessageWeight>.Na przykład ta zasada określa wartość
<MessageWeight>za pomocą zmiennej przepływu o nazwiemessage_weight:<?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>Określ wartość zmiennej użytej w elemencie
<MessageWeight>zidentyfikowanych zasad ochrony przed nagłymi wzrostami. Wartość zmiennej przepływu można wyodrębnić z nagłówków HTTP, parametrów zapytania, ładunku żądania XML lub JSON albo zdefiniować w innych zasadach.- Znajdź w proxy interfejsu API kod, w którym zmienna została zdefiniowana po raz pierwszy.
- Gdy ustalisz, w której zasadzie zmienna jest zdefiniowana i wypełniana jako pierwsza, sprawdź, jak ustawiana jest jej wartość.
- Jeśli wartość zmiennej przepływu jest zgodna z wartością określoną w kroku 1 powyżej, to jest to przyczyna błędu.
Załóżmy na przykład, że przed zasadą Spike Arrest używana jest zasada JavaScript, która ustawia zmienną
message_weightna podstawie metody żądania, jak pokazano poniżej:var verb = context.getVariable("request.verb"); context.setVariable("message_weight", "1.5"); if (verb == 'POST') { context.setVariable("message_weight", "2"); }Zwróć uwagę, że wartość zmiennej
message_weightto1.5, czyli nieprawidłowa wartość (nie jest liczbą całkowitą).
Rozdzielczość
Sprawdź, czy wartość elementu MessageWeight jest prawidłowa (wartość całkowita).
Aby poprawić powyższy przykład, możesz zmodyfikować wartość zmiennej message_weight w JavaScript tak, aby była liczbą całkowitą:
var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
context.setVariable("message_weight", "2");
}
FailedToResolveSpikeArrestRate
Kod błędu
policies.ratelimit.FailedToResolveSpikeArrestRate
Treść odpowiedzi na błąd
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Przykładowy komunikat o błędzie
{
"fault": {
"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy",
"detail": {
"errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
}
}
}Przyczyna
Ten błąd występuje, jeśli odwołanie do zmiennej zawierającej ustawienie limitu w elemencie <Rate> nie może zostać rozwiązane na wartość w ramach zasady Spike Arrest. Ten element jest wymagany i służy do określania szybkości zatrzymania nagłego wzrostu w postaci {int}pm lub {int}ps. Na przykład {int}pm może mieć wartość 500pm, co oznacza 500 połączeń na minutę. Podobnie wartość 10ps oznacza 10 wywołań na sekundę.
Diagnostyka
Określ zasadę Spike Arrest, w której wystąpił błąd, oraz nazwę odwołania, którego nie można prawidłowo rozpoznać. Oba te elementy znajdziesz w elemencie faultstring odpowiedzi na błąd.
Na przykład w tym ciągu błędów nazwa zasady to
SpikeArrest_AuthProxy, a odwołanie torequest.header.rate:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"W pliku XML nieudanej zasady Spike Arrest sprawdź, czy nazwa użytego odwołania jest zgodna z nazwą odwołania podaną w ciągu błędu (krok 1 powyżej). ** **
Na przykład te zasady ustawiają element
z odwołaniem o nazwie request.header.rate, które pasuje do ciągu faultstring:<?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>Sprawdź, czy zmienna jest zdefiniowana i dostępna w przepływie, w którym wykonywana jest zasada Spike Arrest.
Jeśli zmienna ma wartość:
- poza zakresem (niedostępne w określonym procesie, w którym zasada jest wykonywana) lub
- nie można rozstrzygnąć (nie jest zdefiniowana)
wtedy to jest przyczyną błędu.
W przykładzie powyżej wartość współczynnika zatrzymania nagłego wzrostu w elemencie
<Rate>ma być pobierana z nagłówka żądania o nazwie rate. Edge nie może jednak rozpoznać wartości request.header.rate. Dzieje się tak, jeśli nagłówek rate nie jest przekazywany w ramach żądania do interfejsu API.Oto przykładowe żądanie interfejsu API, które nie przekazuje nagłówka rate w ramach żądania:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"Nagłówek rate nie jest przekazywany w ramach żądania, więc odwołanie request.header.rate użyte w elemencie
<Rate>w powyższej zasadzie Spike Arrest jest niezdefiniowane i nie można go rozpoznać. Otrzymasz więc kod błędu:policies.ratelimit.FailedToResolveSpikeArrestRate
Rozdzielczość
Sprawdź, czy zmienna, do której odwołuje się element <Rate>, istnieje lub jest zdefiniowana i dostępna w danym przepływie, w którym wykonywana jest zasada Spike Arrest.
Aby poprawić przykład pokazany powyżej, możesz zmodyfikować żądanie, dodając nagłówek rate, jak pokazano poniżej:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"