Risoluzione dei problemi relativi agli errori di runtime del criterio SpikeArrest

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

InvalidMessageWeight

Codice di errore

policies.ratelimit.InvalidMessageWeight

Corpo della risposta di errore

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

Esempio di messaggio di errore

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

Causa

Questo errore si verifica se il valore specificato per l'elemento <MessageWeight> tramite una variabile di flusso non è valido (un valore non intero).

Ad esempio, se il valore della variabile di flusso specificato per l'elemento <MessageWeight> è 1,5 (un valore non intero), si verifica l'errore.

Diagnosi

  1. Identifica il valore non valido utilizzato per l'elemento <MessageWeight> nel criterio di arresto per picchi. Puoi trovare queste informazioni nell'elemento faultstring della risposta all'errore. Ad esempio, nell'errore seguente, il valore non valido utilizzato per l'elemento <MessageWeight> è 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Esamina tutti i criteri di arresto picco nel proxy API specifico in cui si è verificato il fallimento. Potrebbero essere presenti uno o più criteri di arresto picchi in cui è specificato l'elemento <MessageWeight>.

    Ad esempio, il seguente criterio specifica il valore di <MessageWeight> tramite una variabile di flusso denominata 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. Determina il valore della variabile utilizzata nell'elemento <MessageWeight> dei criteri di arresto degli picchi identificati. Il valore della variabile di flusso può essere estratto dalle intestazioni HTTP, parametri di ricerca, dal payload della richiesta XML o JSON o definito in un altro criterio.

    1. Individua il codice all'interno del proxy API, dove la variabile è stata definita per la prima volta.
    2. Una volta individuato il criterio in cui la variabile è definita e compilata, controlla come viene impostato il valore della variabile.
    3. Se il valore della variabile di flusso corrisponde a quello identificato nel passaggio #1 sopra, significa che è la causa dell'errore.

    Ad esempio, supponiamo che venga utilizzato un criterio JavaScript prima del criterio di arresto degli picchi per impostare la variabile message_weight in base al metodo di richiesta, come mostrato di seguito:

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

    Tieni presente che il valore della variabile message_weight è 1.5, che è un valore invalido (non intero).

Risoluzione

Assicurati che il valore dell'elemento MessageWeight sia valido (valore intero).

Per correggere l'esempio mostrato sopra, puoi modificare il valore della variabile message_weight in JavaScript in modo che sia un numero intero:

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

FailedToResolveSpikeArrestRate

Codice di errore

policies.ratelimit.FailedToResolveSpikeArrestRate

Corpo della risposta di errore

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

Esempio di messaggio di errore

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

Causa

Questo errore si verifica se il riferimento alla variabile contenente l'impostazione della tariffa all'interno dell'elemento <Rate> non può essere risolto in un valore all'interno del criterio di interruzione degli picchi. Questo elemento è obbligatorio e viene utilizzato per specificare il tasso di arresto degli picchi sotto forma di {int}pm o {int}ps. Ad esempio, {int}pm potrebbe essere 500pm, che significa 500 chiamate al minuto. Analogamente, un valore 10ps indica 10 chiamate al secondo.

Diagnosi

  1. Identifica il criterio di arresto picchi in cui si è verificato l'errore e il nome del riferimento che non può essere risolto correttamente. Puoi trovare entrambi questi elementi nell'elemento faultstring della risposta all'errore.

    Ad esempio, nella seguente stringa di errore, il nome del criterio è SpikeArrest_AuthProxy e il riferimento è request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. Nel file XML del criterio di arresto picchi non riuscito, verifica che il nome del riferimento utilizzato corrisponda al nome del riferimento identificato nella stringa di errore (passaggio 1 sopra). ** **

    Ad esempio, la seguente norma imposta l'elemento con il riferimento chiamato request.header.rate, che corrisponde a quello contenuto in faultstring:

    <?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. Determina se la variabile è definita e disponibile nel flusso in cui viene eseguita la norma di arresto degli picchi.

  4. Se la variabile è:

    • fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) o
    • non può essere risolto (non è definito)

    allora è la causa dell'errore.

    Nell'esempio riportato sopra, il valore del tasso di arresto degli picchi nell'elemento <Rate> dovrebbe essere recuperato dall'intestazione della richiesta denominata rate. Tuttavia, Apigee non è in grado di risolvere request.header.rate. Questo accade se l'intestazione rate non viene passata nell'ambito della richiesta API.

    Ecco una richiesta API di esempio che non passa l'intestazione rate come parte della richiesta:

      curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json"
    

    dove your_host_alias è un dominio pubblico utilizzato per accedere alle API, come configurato nella proprietà virtualhosts.hostAliases del file delle sostituzioni. Consulta Specificare le sostituzioni della configurazione.

    Poiché l'intestazione rate non viene passata nell'ambito della richiesta, il riferimento request.header.rate utilizzato nell'elemento <Rate> nel criterio di interruzione per picchi riportato sopra non è definito e quindi non può essere risolto. Riceverai quindi il codice di errore:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Risoluzione

Assicurati che la variabile a cui fa riferimento l'elemento <Rate> esista/sia definita e disponibile nel flusso specifico in cui viene eseguito il criterio di arresto picchi.

Per correggere l'esempio mostrato sopra, puoi modificare la richiesta in modo da includere l'intestazione rate, come mostrato di seguito:

curl -v  http://your_host_alias/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"

dove your_host_alias è un dominio pubblico utilizzato per accedere alle API, come configurato nella proprietà virtualhosts.hostAliases del file delle sostituzioni. Consulta Specificare le sostituzioni della configurazione.