Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.
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. Apigee kann die 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://your_host_alias/check_spikearrest -H "Content-Type: application/json"
Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut
virtualhosts.hostAliases
in Ihrer Überschreibungsdatei konfiguriert. Siehe Konfigurationsüberschreibungen festlegen.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://your_host_alias/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"
Dabei ist your_host_alias eine öffentlich zugängliche Domain, die für den Zugriff auf Ihre APIs verwendet wird, wie im Attribut virtualhosts.hostAliases
in Ihrer Überschreibungsdatei konfiguriert.
Siehe Konfigurationsüberschreibungen festlegen.