Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. Informacje
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ść podana w polu <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ślona dla elementu <MessageWeight>
wynosi 1, 5 (wartość niebędąca liczbą całkowitą), wystąpi błąd.
Diagnostyka
Odszukaj nieprawidłową wartość elementu
<MessageWeight>
w zasadach dotyczących łagodzenia szczytów. Te informacje znajdziesz w elemenciefaultstring
odpowiedzi na błąd. Na przykład w tym błędzie nieprawidłowa wartość elementu<MessageWeight>
to1.5
:"faultstring": "Invalid message weight value 1.5"
Sprawdź wszystkie zasady Spike Arrest w przypadku konkretnego interfejsu API Proxy, w którym wystąpił błąd. Może istnieć co najmniej 1 zasada Spike Arrest, w której podano 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żywanej w elemencie
<MessageWeight>
zidentyfikowanych zasad dotyczących zatrzymania wzrostu. Wartość zmiennej przepływu może być wyodrębniona z nagłówków HTTP, parametrów zapytania, ładunku żądania XML lub JSON albo zdefiniowana w innej zasadzie.- Znajdź kod w interfejsie API proxy, w którym zmienna została zdefiniowana jako pierwsza.
- Gdy ustalisz zasadę, zgodnie z którą zmienna jest zdefiniowana i wypełniona, sprawdź, jak ustawiana jest wartość zmiennej.
- 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 ustawiana jest zmienna
message_weight
w zależności od metody żądania, jak w przykładzie 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_weight
to1.5
, czyli nieprawidłowa (niebędąca liczbą całkowitą) wartość.
Rozdzielczość
Sprawdź, czy wartość elementu MessageWeight
jest prawidłowa (wartość całkowita).
Aby poprawić powyższy przykład, możesz zmienić wartość zmiennej message_weight
w kodzie 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, gdy odniesienia do zmiennej zawierającej ustawienie stawki w elemencie <Rate>
nie można przekształcić w wartość w zasadach Spike Arrest. Ten element jest obowiązkowy i służy do określania gwałtownego wzrostu liczby aresztowań w postaci {int}pm
lub {int}ps
. Na przykład {int}pm
może mieć wartość 500pm
, co oznacza 500 wywołań na minutę. Podobnie wartość 10ps
oznacza 10 połączeń na sekundę.
Diagnostyka
Zidentyfikuj zasadę Spike Arrest, w której wystąpił błąd, oraz nazwę pliku referencyjnego, który nie może zostać poprawnie rozwiązany. 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 zasad Spike Arrest, które nie działają, sprawdź, czy nazwa odwołania jest zgodna z nazwą odwołania wskazaną w ciągu błędów (krok 1 powyżej). ** **
Na przykład ta zasada ustawia element
o nazwanej request.header.rate
, który jest zgodny z wartością w ciągu błędu:<?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 obrębie procesu, w którym są wykonywane zasady dotyczące Spike Arrest.
Jeśli zmienna jest:
- poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest wykonywana zasada) lub
- nie można rozwiązać (nie jest zdefiniowany)
to właśnie jest przyczyną błędu.
W wymienionym powyżej przykładzie wartość współczynnika zatrzymania skoku w elemencie
<Rate>
powinna być pobierana z nagłówka żądania o nazwie rate. Edge nie może jednak rozwiązać parametru request.header.rate. Dzieje się tak, jeśli stawka nagłówka nie jest przekazywana w żądaniu do interfejsu API.Oto przykład żądania interfejsu API, które nie przekazuje nagłówka rate:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
Ponieważ rate nagłówka nie jest przekazywany w żądaniu, odwołanie do request.header.rate użyte w elemencie
<Rate>
w powyższej zasadzie Spike Arrest jest nieokreślone i dlatego nie można go rozwiązać. Otrzymasz kod błędu:policies.ratelimit.FailedToResolveSpikeArrestRate
Rozdzielczość
Upewnij się, że zmienna, do której odwołuje się element <Rate>
, istnieje lub jest zdefiniowana i dostępna w konkretnym procesie, w którym wykonywana jest zasada gwałtownego zatrzymania.
Aby poprawić powyższy przykład, możesz zmodyfikować żądanie, aby zawierało 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"