Você está visualizando a documentação do Apigee Edge.
Acesse a documentação da
Apigee X. informações
InvalidMessageWeight
Código do erro
policies.ratelimit.InvalidMessageWeight
Corpo da resposta de erro
{ "fault": {jdoe "faultstring": "Invalid message weight value [invalid_value]", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
Exemplo de mensagem de erro
{ "fault": { "faultstring": "Invalid message weight value 1.5", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
Causa
Esse erro ocorrerá se o valor especificado para o elemento <MessageWeight>
por meio de uma variável de fluxo for inválido (um valor não inteiro).
Por exemplo, se o valor da variável de fluxo especificada para o elemento <MessageWeight>
for 1,5 (um valor não inteiro), o erro ocorrerá.
Diagnóstico
Identifique o valor inválido usado para o elemento
<MessageWeight>
na política Spike Arrest. Você encontra essas informações no elementofaultstring
da resposta de erro. Por exemplo, no erro a seguir, o valor inválido usado para o elemento<MessageWeight>
é1.5
:"faultstring": "Invalid message weight value 1.5"
Examine todas as políticas Spike Arrest no proxy específico de API em que ocorreu a falha. Pode haver uma ou mais políticas Spike Arrest em que o elemento
<MessageWeight>
foi especificado.Por exemplo, a política a seguir especifica o valor de
<MessageWeight>
por meio de uma variável de fluxo chamadamessage_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>
Determine o valor da variável usada no elemento
<MessageWeight>
das políticas Spike Arrest identificadas. O valor da variável de fluxo pode ser extraído de cabeçalhos HTTP, parâmetros de consulta, payload de solicitação XML ou JSON ou definido em outra política.- Localize o código no proxy de API em que a variável foi definida primeiro.
- Depois de descobrir a política em que a variável foi definida e preenchida primeiro, verifique como o valor da variável foi definido.
- Se o valor da variável de fluxo corresponder ao valor identificado na Etapa 1 acima, essa será a causa do erro.
Por exemplo, suponha que uma política JavaScript seja usada antes da política Spike Arrest para definir a variável
message_weight
com base no método de solicitação, conforme mostrado abaixo:var verb = context.getVariable("request.verb"); context.setVariable("message_weight", "1.5"); if (verb == 'POST') { context.setVariable("message_weight", "2"); }
Observe que o valor da variável
message_weight
é1.5
, que é inválido (um valor não inteiro).
Resolução
Verifique se o valor do elemento MessageWeight
é válido (valor inteiro).
Para corrigir o exemplo mostrado acima, modifique o valor da variável message_weight
no JavaScript para ser um número inteiro:
var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
context.setVariable("message_weight", "2");
}
FailedToResolveSpikeArrestRate
Código do erro
policies.ratelimit.FailedToResolveSpikeArrestRate
Corpo da resposta de erro
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Exemplo de mensagem de erro
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Causa
Esse erro ocorrerá se a referência à variável que contém a configuração de taxa no elemento <Rate>
não puder ser resolvida como um valor na política Spike Arrest. Esse elemento é obrigatório e usado para especificar a taxa de parada de pico na forma de {int}pm
ou {int}ps
. Por exemplo, {int}pm
pode ser 500pm
, o que significa 500 chamadas por minuto. Da mesma forma, um valor de 10ps
significa dez chamadas por segundo.
Diagnóstico
Identifique a política Spike Arrest em que o erro ocorreu e o nome da referência que não pode ser resolvido corretamente. É possível encontrar esses dois itens no elemento de string de falha da resposta de erro.
Por exemplo, na seguinte string de falha, o nome da política é
SpikeArrest_AuthProxy
e a referência érequest.header.rate
:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
No XML da política Spike Arrest com falha, verifique se o nome da referência usada corresponde ao nome da referência identificado na string de falha (etapa 1 acima). ** **
Por exemplo, a política a seguir define o elemento
com a referência chamada request.header.rate
, que corresponde ao que está na string de falha:<?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>
Determine se a variável está definida e disponível no fluxo em que a política Spike Arrest está sendo executada.
Se a variável for:
- fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
- não é possível resolver (não está definida)
essa será a causa do erro.
No exemplo mostrado acima, o valor da taxa de parada de pico no elemento
<Rate>
precisa ser recuperado do cabeçalho da solicitação denominado rate. No entanto, o Edge não consegue resolver request.header.rate. Isso acontecerá se o cabeçalho rate não for passado como parte da solicitação de API.Veja um exemplo de solicitação de API que não transmite o cabeçalho rate como parte da solicitação:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
Como o cabeçalho rate não foi transmitido como parte da solicitação, a referência request.header.rate usada no elemento
<Rate>
na política Spike Arrest acima é indefinida e, portanto, não pode ser resolvida. Você receberá o código do erro:policies.ratelimit.FailedToResolveSpikeArrestRate
Resolução
Verifique se a variável mencionada no elemento <Rate>
existe/está definida e disponível no fluxo específico, em que a política Spike Arrest está sendo executada.
Para corrigir o exemplo mostrado acima, você pode modificar a solicitação para incluir o cabeçalho rate como mostrado abaixo:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"