Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
InvalidMessageWeight
Код ошибки
policies.ratelimit.InvalidMessageWeight
Тело ответа об ошибке
{ "fault": {jdoe "faultstring": "Invalid message weight value [invalid_value]", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
Пример сообщения об ошибке
{
"fault": {
"faultstring": "Invalid message weight value 1.5",
"detail": {
"errorcode": "policies.ratelimit.InvalidMessageWeight"
}
}
}Причина
Эта ошибка возникает, если значение, указанное для элемента <MessageWeight> через переменную потока, является недопустимым (нецелочисленным значением).
Например, если значение переменной потока, указанной для элемента <MessageWeight> , равно 1,5 (нецелое значение), то возникает ошибка.
Диагноз
Определите недопустимое значение, используемое для элемента
<MessageWeight>в политике предотвращения скачков нагрузки. Эту информацию можно найти в элементеfaultstringответа об ошибке. Например, в следующей ошибке недопустимое значение для элемента<MessageWeight>равно1.5:"faultstring": "Invalid message weight value 1.5"Проанализируйте все политики предотвращения скачков активности в конкретном API-прокси, где произошла ошибка. В одной или нескольких политиках предотвращения скачков активности может быть указан элемент
<MessageWeight>.Например, следующая политика задает значение
<MessageWeight>через переменную потока с именем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>Определите значение переменной, используемой в элементе
<MessageWeight>идентифицированной политики (политик) предотвращения скачков нагрузки. Значение переменной потока может быть извлечено из HTTP-заголовков, параметров запроса, полезной нагрузки XML или JSON-запроса или определено в другой политике.- Найдите код в API-прокси, где эта переменная была определена впервые.
- После того, как вы определите, в соответствии с какой политикой переменная определяется и заполняется в первую очередь, проверьте, как устанавливается значение этой переменной.
- Если значение переменной потока совпадает со значением, определенным на шаге №1 выше, то это и является причиной ошибки.
Например, предположим, что перед применением политики предотвращения всплесков активности используется политика JavaScript для установки переменной
message_weightв зависимости от метода запроса, как показано ниже:var verb = context.getVariable("request.verb"); context.setVariable("message_weight", "1.5"); if (verb == 'POST') { context.setVariable("message_weight", "2"); }Обратите внимание, что значение переменной
message_weightравно1.5, что является недопустимым (нецелым) значением.
Разрешение
Убедитесь, что значение элемента MessageWeight является допустимым (целочисленным).
Чтобы исправить приведенный выше пример, вы можете изменить значение переменной message_weight в JavaScript на целое число:
var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
context.setVariable("message_weight", "2");
}
FailToResolveSpikeArrestRate
Код ошибки
policies.ratelimit.FailedToResolveSpikeArrestRate
Тело ответа об ошибке
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Пример сообщения об ошибке
{
"fault": {
"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy",
"detail": {
"errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
}
}
}Причина
Эта ошибка возникает, если ссылка на переменную, содержащую настройку скорости внутри элемента <Rate> , не может быть преобразована в значение в политике предотвращения скачков нагрузки. Этот элемент является обязательным и используется для указания скорости предотвращения скачков нагрузки в формате {int}pm или {int}ps . Например, {int}pm может быть 500pm , что означает 500 звонков в минуту. Аналогично, значение 10ps означает 10 звонков в секунду.
Диагноз
Укажите политику Spike Arrest, в которой произошла ошибка, и имя ссылки, которую не удалось корректно разрешить. Оба эти элемента можно найти в элементе faultstring ответа об ошибке.
Например, в следующей строке ошибки имя политики —
SpikeArrest_AuthProxy, а ссылка —request.header.rate:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"В XML-файле политики Spike Arrest, в котором произошел сбой, убедитесь, что имя используемой ссылки совпадает с именем ссылки, указанным в строке ошибки (шаг № 1 выше).
Например, следующая политика устанавливает
элемент со ссылкой на request.header.rate, которая соответствует содержимому строки ошибки:<?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>Определите, определена ли переменная и доступна ли она в потоке, в котором выполняется политика предотвращения скачков активности.
Если переменная имеет одно из следующих значений:
- выходит за рамки действия (недоступно в конкретном процессе, в котором выполняется политика) или
- Не может быть решено (не определено)
Тогда в этом и заключается причина ошибки.
В приведенном выше примере значение параметра spike stop rate в элементе
<Rate>должно быть получено из заголовка запроса с именем rate . Однако Edge не может разрешить request.header.rate . Это происходит, если заголовок rate не передается в составе API-запроса.Вот пример API-запроса, в котором заголовок rate не передается в качестве части запроса:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"Поскольку параметр ` rate` в заголовке запроса не передается, ссылка `request.header.rate` , используемая в элементе
<Rate>в указанной выше политике защиты от скачков нагрузки, не определена и, следовательно, не может быть разрешена. Поэтому вы получите код ошибки:policies.ratelimit.FailedToResolveSpikeArrestRate
Разрешение
Убедитесь, что переменная, на которую ссылается элемент <Rate> существует/определена и доступна в конкретном потоке, где выполняется политика предотвращения скачков нагрузки.
Чтобы исправить приведенный выше пример, вы можете изменить запрос, добавив заголовок rate , как показано ниже:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"