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

Wyświetlasz dokumentację Apigee Edge.
Przejdź do Dokumentacja 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ść określona dla elementu <MessageWeight> przez zmienna przepływu jest nieprawidłowa (wartość nie jest liczbą całkowitą).

Jeśli na przykład wartość zmiennej przepływu określonej dla parametru <MessageWeight> to 1,5 (wartość nie jest całkowita), występuje błąd.

Diagnostyka

  1. Znajdź nieprawidłową wartość używaną w elemencie <MessageWeight> w zwiększeniu Zasady aresztowania. Te informacje znajdziesz w elemencie faultstring w odpowiedź na żądanie błędu. Na przykład w tym błędzie: nieprawidłowa wartość użyta jako Element <MessageWeight> jest 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Sprawdź wszystkie zasady Spike Arrest na konkretnym serwerze proxy API, gdzie wartość 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. Ustal wartość zmiennej używanej w elemencie <MessageWeight> funkcji określonych zasad dotyczących aresztowania gwałtownego 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 obrębie serwera proxy interfejsu API, w którym najpierw zdefiniowano zmienną.
    2. Gdy już ustalisz, w której zasadzie zmienna jest zdefiniowana i uzupełniana jako pierwsza, sprawdź, jak jest ustawiana jej wartość.
    3. Jeśli wartość zmiennej przepływu jest zgodna z wartością określoną w kroku 1 powyżej, to jest przyczyną błędu.

    Załóżmy na przykład, że przed regułą Spike Arrest używana jest zasada JavaScript Zasada ustawiania zmiennej message_weight na podstawie metody żądania jako 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, która jest nieprawidłowa (nie całkowita) wartość.

Rozdzielczość

Sprawdź, czy wartość elementu MessageWeight jest prawidłową wartością (całkowitą) ).

Aby poprawić przykład powyżej, możesz zmienić wartość zmiennej message_weight w JavaScripcie, aby być 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 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ślenia współczynnika zatrzymania szczytowego w postaci {int}pm lub {int}ps. Na przykład {int}pm może mieć wartość 500pm, czyli 500 wywołań na minutę. Podobnie wartość 10ps oznacza 10 wywołań na sekunda.

Diagnostyka

  1. Wskaż zasadę, w której wystąpił błąd, oraz podaj nazwę tej zasady którego nie można poprawnie rozwiązać. Oba te produkty znajdziesz w elemencie faultstring odpowiedzi na błąd.

    Na przykład w tym ciągu błędów nazwa zasady to SpikeArrest_AuthProxy, a plik referencyjny 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łędu (krok 1 powyżej). **.

    Na przykład ta zasada ustawia element z odwołaniem o nazwie request.header.rate, która odpowiada temu, co jest w ciągu znaków 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. Określ, czy zmienna jest zdefiniowana i dostępna w procesie, w którym Trwa wykonywanie zasad dotyczących zatrzymania gwałtownego wzrostu.

  4. Jeśli zmienna jest:

    • poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest tworzona zasada) wykonano) lub
    • nie można rozwiązać (nie jest zdefiniowany)

    to właśnie jest przyczyną błędu.

    W przykładzie powyżej wartość gwałtownego wzrostu liczby aresztowań w kraju <Rate> element powinien być pobierany z nagłówka żądania o nazwie rate. Edge nie może jednak przetworzyć żądania request.header.rate. Dzieje się tak jeśli stawka nagłówka nie jest przekazywana w żądaniu do interfejsu API.

    Oto przykładowe żądanie do interfejsu API, które nie przekazuje rate nagłówka w ramach żądanie:

        curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
    

    Ponieważ stawka nagłówka nie jest przekazywana w żądaniu, odwołanie Parametr request.header.rate używany w elemencie <Rate> powyższego wzrostu Zasada aresztowania jest niezdefiniowana, dlatego nie można rozwiązać tego problemu. W związku z tym otrzymasz kod błędu:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Rozdzielczość

Sprawdź, czy zmienna, do której odwołuje się element <Rate>, istnieje lub jest zdefiniowana i dostępne w ramach konkretnego procesu, w którym realizowana jest zasada „gwałtownego zatrzymania”.

Aby poprawić przykład powyżej, możesz zmodyfikować żądanie, tak 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"