Risoluzione degli errori di runtime del criterio di arresto dei picchi

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Visualizza 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 è valida (valore non intero).

Ad esempio, se il valore della variabile di flusso specificata per <MessageWeight> è 1.5 (valore non intero), si verifica l'errore.

Diagnosi

  1. Identifica il valore non valido utilizzato per l'elemento <MessageWeight> nella colonna Spike Norme di arresto. Puoi trovare queste informazioni nell'elemento faultstring della risposta di 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 tutte le norme relative all'arresto dei picchi nel proxy API specifico in cui si è verificato un errore. Potrebbero esserci una o più norme relative all'arresto dei picchi in cui è specificato l'elemento <MessageWeight>.

    Ad esempio, il seguente criterio specifica il valore di <MessageWeight> attraverso 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> di le Norme relative all'arresto dei picchi identificate. Il valore della variabile di flusso può essere estratte da intestazioni HTTP, parametri di ricerca, un payload di richiesta XML o JSON o definito in un altro criterio.

    1. Individua il codice all'interno del proxy API, dove è stata definita prima la variabile.
    2. Una volta stabilita la norma in cui viene definita la variabile, e verifica come è stato impostato il valore della variabile.
    3. Se il valore della variabile di flusso corrisponde al valore identificato nel passaggio 1, è la causa dell'errore.

    Ad esempio, supponiamo che venga utilizzato un criterio JavaScript prima dell'arresto dei picchi. Criterio per impostare la variabile message_weight in base al metodo di richiesta come 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 è valore non valido (non intero).

Risoluzione

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

Per correggere l'esempio mostrato sopra, puoi modificare il valore della variabile message_weight nel codice 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 della funzione Spike Arrest . Questo elemento è obbligatorio e viene utilizzato per specificare il tasso di arresto dei picchi in nel formato {int}pm o {int}ps. Ad esempio, {int}pm potrebbe essere 500pm, il che significa 500 chiamate al minuto. Analogamente, il valore 10ps indica 10 chiamate per secondo.

Diagnosi

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

    Ad esempio, nella stringa di errore seguente, 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 Spike Arrest con errori, verifica che il nome del riferimento utilizzato corrisponde al nome di riferimento identificato nella stringa di errore (passaggio 1 sopra). ** **

    Ad esempio, il seguente criterio consente di impostare l'elemento con il riferimento denominato request.header.rate, che corrisponde al contenuto della stringa di errore:

    <?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 la variabile È in corso l'applicazione delle norme relative all'arresto dei picchi.

  4. Se la variabile è:

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

    questa è la causa dell'errore.

    Nell'esempio mostrato sopra, il valore del tasso di arresto dei picchi in <Rate> dovrebbe essere recuperato dall'intestazione della richiesta denominata rate. Tuttavia, Apigee non è in grado di risolvere il problema request.header.rate. Ciò accade se l'intestazione rate non viene trasmessa come parte della richiesta API.

    Ecco un esempio di richiesta API che non passa la tariffa dell'intestazione come parte di: la 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 tue API, come configurato nella proprietà virtualhosts.hostAliases nel file degli override. Consulta Specificare la configurazione override.

    Poiché l'intestazione rate non viene trasmessa come parte della richiesta, fai riferimento request.header.rate utilizzato nell'elemento <Rate> nel precedente picco Il criterio di arresto non è definito e non può essere risolto. Riceverai quindi il codice di errore:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Risoluzione

Assicurati che la variabile a cui viene fatto riferimento nell'elemento <Rate> esista o sia definita e disponibili nel flusso specifico in cui viene attuata la norma relativa all'arresto dei picchi.

Per correggere l'esempio riportato 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 tue API, come configurato nella proprietà virtualhosts.hostAliases nel file degli override. Consulta Specificare la configurazione override.