Estás viendo la documentación de Apigee Edge.
Ve a la
documentación de Apigee X. info
InvalidMessageWeight
Código de error
policies.ratelimit.InvalidMessageWeight
Cuerpo de la respuesta de error
{ "fault": {jdoe "faultstring": "Invalid message weight value [invalid_value]", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
Ejemplo de mensaje de error
{ "fault": { "faultstring": "Invalid message weight value 1.5", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
Causa
Este error se produce si el valor especificado para el elemento <MessageWeight>
a través de una variable de flujo no es válido (un número no entero).
Por ejemplo, si el valor de la variable de flujo especificado para el elemento <MessageWeight>
es 1.5 (un número no entero), se produce el error.
Diagnóstico
Identifica elvalor no válido que se usó para el elemento
<MessageWeight>
en la política de protección contra aumentos de tráfico. Puedes encontrar esta información en el elementofaultstring
de la respuesta de error. Por ejemplo, en el siguiente error, el valor no válido que se usa para el elemento<MessageWeight>
es1.5
:"faultstring": "Invalid message weight value 1.5"
Examina todas las políticas Spike Arrest en el proxy de API específico en el que se produjo la falla. Podría haber una o más políticas de protección contra aumentos de tráfico en la que se especifique el elemento
<MessageWeight>
.Por ejemplo, la siguiente política especifica el valor de
<MessageWeight>
a través de una variable de flujo llamadamessage_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>
Determina el valor de la variable que se usó en el elemento
<MessageWeight>
de las políticas Spike Arrest identificadas. El valor de la variable de flujo se puede extraer de los encabezados HTTP, los parámetros de consulta yla carga útil de solicitud XML o JSON, o bien se define en otra política:- Ubica el código en el proxy de API, donde la variable se definió primero.
- Una vez que descubras la política en la que se define y propagas la variable primero, verifica cómo se establece su valor.
- Si el valor de la variable de flujo coincide con el valor identificado en el paso 1, esa es la causa del error.
Por ejemplo, supongamos que se usa una política de JavaScript antes de la política de protección contra aumentos de tráficopara configurar la variable
message_weight
según el método de solicitud como se muestra a continuación:var verb = context.getVariable("request.verb"); context.setVariable("message_weight", "1.5"); if (verb == 'POST') { context.setVariable("message_weight", "2"); }
Ten en cuenta que el valor de la variable
message_weight
es1.5
, que es un valor no válido (un número que no es entero).
Solución
Asegúrate de que el valor del elemento MessageWeight
sea un valor válido (número entero).
Para corregir el ejemplo anterior, puedes modificar el valor de la variable message_weight
en JavaScript para que seaun número entero:
var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
context.setVariable("message_weight", "2");
}
FailedToResolveSpikeArrestRate
Código de error
policies.ratelimit.FailedToResolveSpikeArrestRate
Cuerpo de la respuesta de error
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Ejemplo de mensaje de error
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Causa
Este error se produce si la referencia a la variable que contiene la configuración de tarifa dentro del elemento <Rate>
no se puede resolver en un valor dentro de la política de Spike Arrest. Este elemento es obligatorio y se usa para especificar el índice de protección contra aumentos de tráfico en el formato de {int}pm
o {int}ps
. Por ejemplo, {int}pm
podría ser 500pm
, lo que significa 500 llamadas por minuto. Del mismo modo, un valor de 10ps
significa 10 llamadas por segundo.
Diagnóstico
Identifica la política de Spike Arrest en la que se produjo el error y el nombre de la referencia que no se puede resolver correctamente. Puedes encontrar ambos elementos en el elemento de la respuesta de error.
Por ejemplo, en la siguiente string con errores, el nombre de la política es
SpikeArrest_AuthProxy
y la referencia esrequest.header.rate
:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
En el archivo XML de la política Spike Arrest con errores, verifica que el nombre de la referencia usada coincida con el nombre de referencia identificado en la string con errores(paso 1 anterior). ** **
Por ejemplo, en la siguiente política, se establece el
elemento con la referencia llamada request.header.rate
, que coincide con lo que hay en la string con errores:<?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>
Determina si la variable está definida y disponible en el flujo en el que se ejecuta la política de protección contra el aumento de tráfico.
Verifica si la variable tiene una de las siguientes características:
- fuera de alcance (no disponible en el flujo específico en el que se ejecuta la política)
- no se puede resolver (no está definido)
entonces esa es la causa del error.
En el ejemplo anterior, el valor de la tasa de interrupción de aumento de tráfico en el elemento
<Rate>
se debería recuperar del encabezado de solicitud llamado rate. Sin embargo, Edge no puede resolver request.header.rate. Esto sucede si no se pasa el encabezado rate como parte de la solicitud a la API.La siguiente es una solicitud a la API de muestra que no pasa el encabezado rate como parte de la solicitud:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
Debido a que el encabezado rate no se pasa como parte de la solicitud, el request.header.rate de referencia que se usa en el elemento
<Rate>
en la política de protección contra el aumento de tráfico anterior es indefinido y, por lo tanto, no se puede resolver. Por lo tanto, recibirás el código de error:policies.ratelimit.FailedToResolveSpikeArrestRate
Solución
Asegúrate de que la variable a la que se hace referencia en el elemento <Rate>
exista o esté definida y disponible en el flujo específico, en el que se ejecuta la política Spike Arrest.
Para corregir el ejemplo que se muestra arriba, puedes modificar la solicitud para incluir el encabezado rate como se muestra a continuación:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"