Rozwiązywanie problemów z błędem zasad dotyczących Spike Arrest

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

  1. Odszukaj nieprawidłową wartość elementu <MessageWeight> w zasadach dotyczących łagodzenia szczytów. Te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym błędzie nieprawidłowa wartość elementu <MessageWeight> to 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. 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 nazwie message_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>
    
  3. 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.

    1. Znajdź kod w interfejsie API proxy, w którym zmienna została zdefiniowana jako pierwsza.
    2. Gdy ustalisz zasadę, zgodnie z którą zmienna jest zdefiniowana i wypełniona, sprawdź, jak ustawiana jest wartość zmiennej.
    3. 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 to 1.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

  1. 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 to request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. 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>
    
    
  3. Sprawdź, czy zmienna jest zdefiniowana i dostępna w obrębie procesu, w którym są wykonywane zasady dotyczące Spike Arrest.

  4. 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"