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
Ermitteln Sie den ungültigen Wert, der für das
<MessageWeight>
-Element in der Spike Arrest-Richtlinie verwendet wird. Sie finden die entsprechende Information imfaultstring
-Element der Fehlerantwort. Im folgenden Fehler ist beispielsweise1.5
der ungültige Wert für das Element<MessageWeight>
:"faultstring": "Invalid message weight value 1.5"
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 Namenmessage_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>
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:- Suchen Sie den Code im API-Proxy, in dem die Variable zuerst definiert wurde.
- 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.
- 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
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 Referenzrequest.header.rate
:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
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>
Prüfen Sie, ob die Variable definiert und in dem Ablauf verfügbar ist, in dem die Spike Arrest-Richtlinie ausgeführt wird.
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"