Laufzeitfehler bei der Spike Arrest-Richtlinie beheben

Sie lesen die Dokumentation zu Apigee Edge.
Sehen Sie sich die Apigee X-Dokumentation an.
info

InvalidMessageWeight

Fehlercode

policies.ratelimit.InvalidMessageWeight

Fehlerantworttext

{
    "fault": {jdoe
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn der durch eine Ablaufvariable für das <MessageWeight>-Element angegebene Wert ungültig ist (ein nicht ganzzahliger Wert).

Wenn beispielsweise der Wert für die dem <MessageWeight>-Element angegebene Ablaufvariable 1,5 ist (ein nicht ganzzahliger Wert), tritt der Fehler auf.

Diagnose

  1. Ermitteln Sie den ungültigen Wert, der für das <MessageWeight>-Element in der Spike Arrest-Richtlinie verwendet wird. Sie finden die entsprechende Information im faultstring-Element der Fehlerantwort. Im folgenden Fehler ist beispielsweise 1.5 der ungültige Wert für das Element <MessageWeight>:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Untersuchen Sie alle Spike Arrest-Richtlinien im entsprechenden API-Proxy, auf dem der Fehler aufgetreten ist. Es kann eine oder mehrere Spike Arrest-Richtlinien geben, in denen das Element <MessageWeight> angegeben ist.

    Die folgende Richtlinie gibt beispielsweise den Wert von <MessageWeight> über eine Ablaufvariable mit dem Namen message_weight: an.

    <?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. Ermitteln Sie den Wert der Variablen, die im <MessageWeight>-Element der identifizierten Spike Arrest-Richtlinien verwendet wird. Der Wert der Ablaufvariablen kann aus HTTP-Headern, Abfrageparametern, einer XML- oder JSON-Anfrage-Nutzlast oder einer anderen Richtlinie extrahiert werden:

    1. Suchen Sie den Code im API-Proxy, in dem die Variable zuerst definiert wurde.
    2. Sobald Sie die Richtlinie ermittelt haben, in der die Variable zuerst definiert und ausgefüllt wurde, prüfen Sie, wie der Wert für die Variable festgelegt wird.
    3. Wenn der Wert der Ablaufvariablen mit dem in Schritt 1 angegebenen Wert übereinstimmt, ist dies die Fehlerursache.

    Angenommen, eine JavaScript-Richtlinie wird vor der Spike Arrest-Richtlinie dazu verwendet, die Variable message_weight basierend auf der Anfragemethode wie unten dargestellt festzulegen:

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    Beachten Sie, dass der Wert der Variable message_weight 1.5 ist, also ein ungültiger Wert (kein Ganzzahlwert).

Lösung

Achten Sie darauf, dass der Wert des MessageWeight-Elements ein gültiger Wert ist (Ganzzahl).

Um das obige Beispiel zu korrigieren, können Sie den Wert der Variable message_weight im JavaScript in eine Ganzzahl ändern.

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

FailedToResolveSpikeArrestRate

Fehlercode

policies.ratelimit.FailedToResolveSpikeArrestRate

Fehlerantworttext

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

Beispiel für Fehlermeldung

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn der Verweis auf die Variable mit der Rateneinstellung im Element <Rate> nicht zu einem Wert in der Spike Arrest-Richtlinie aufgelöst werden kann. Dieses Element ist obligatorisch und wird verwendet, um die Arrestrate im Format {int}pm oder {int}ps anzugeben. Beispiel: {int}pm ist 500pm, was 500 Aufrufe pro Minute bedeutet. Ebenso entspricht ein Wert von 10ps 10 Aufrufen pro Sekunde.

Diagnose

  1. Identifizieren Sie die Spike Arrest-Richtlinie, in der der Fehler aufgetreten ist, sowie den Namen des Verweises, der nicht ordnungsgemäß aufgelöst werden kann. Sie finden beide Elemente im Fehlerstring-Element der Fehlerantwort.

    Im folgenden Fehlerstring lautet der Richtlinienname beispielsweise SpikeArrest_AuthProxy und die Referenz request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. Prüfen Sie in der fehlgeschlagenen XML-Datei der Spike Arrest-Richtlinie, ob der Name der verwendeten Referenz mit dem Referenznamen im Fehlerstring (Schritt 1 oben) übereinstimmt. ** **

    Folgende Richtlinie legt beispielsweise das -Element mit der Referenz namens request.header.rate fest, was dem Inhalt des Fehlerstring entspricht:

    <?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. Prüfen Sie, ob die Variable definiert und in dem Ablauf verfügbar ist, in dem die Spike Arrest-Richtlinie ausgeführt wird.

  4. Wenn die Variable entweder:

    • außerhalb des Gültigkeitsbereichs liegt (nicht in dem spezifischen Ablauf verfügbar ist, in dem die Richtlinie ausgeführt wird) oder
    • Kann nicht aufgelöst werden (nicht definiert)

    dann ist das die Ursache für den Fehler.

    Im gezeigten Beispiel soll der Wert der Spike Arrest-Rate im Element <Rate> aus dem Anfrageheader rate abgerufen werden. Edge kann request.header.rate jedoch nicht auflösen. Dies geschieht, wenn der Header rate nicht als Teil der API-Anfrage übergeben wird.

    Hier sehen Sie eine Beispiel-API-Anfrage, die den Header rate nicht als Teil der Anfrage übergibt:

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

    Da der Header rate nicht als Teil der Anfrage übergeben wird, ist die referenzierte request.header.rate im Element <Rate> in der obigen Spike Arrest-Richtlinien nicht definiert und kann entsprechend nicht aufgelöst werden. Sie erhalten also die Fehlermeldung:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Lösung

Achten Sie darauf, dass die Variable, auf die im <Rate>-Element verwiesen wird, vorhanden/definiert und in dem spezifischen Ablauf verfügbar ist, in dem die Spike Arrest-Richtlinie ausgeführt wird.

Um das Beispiel oben zu korrigieren passen Sie die Anfrage so an, dass der Header rate wie unten dargestellt eingeschlossen wird:

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