Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Неверный вес сообщения
Код ошибки
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>
в политике Spike Arrest. Эту информацию можно найти в элементеfaultstring
ответа об ошибке. Например, в следующей ошибке недопустимое значение, используемое для элемента<MessageWeight>
, равно1.5
:"faultstring": "Invalid message weight value 1.5"
Проверьте все политики Spike Arrest в конкретном прокси-сервере API, где произошел сбой. Может существовать одна или несколько политик Spike Arrest, в которых указан элемент
<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>
идентифицированных политик(ий) Spike Arrest. Значение переменной потока можно извлечь из заголовков HTTP, параметров запроса, полезных данных запроса XML или JSON или определить в другой политике.- Найдите код в прокси-сервере API, где переменная была определена первой.
- Как только вы определите политику, в которой переменная определена и заполнена в первую очередь, проверьте, как устанавливается значение переменной.
- Если значение переменной потока совпадает со значением, указанным на шаге 1 выше, это и есть причина ошибки.
Например, предположим, что политика JavaScript используется до политики Spike Arrest для установки переменной
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");
}
FailedToResolveSpikeArrestRate
Код ошибки
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>
, невозможно преобразовать в значение в политике Spike Arrest. Этот элемент является обязательным и используется для указания скорости остановки пиков в форме {int}pm
или {int}ps
. Например, {int}pm
может быть 500pm
, что означает 500 вызовов в минуту. Аналогично, значение 10ps
означает 10 вызовов в секунду.
Диагностика
Определите политику Spike Arrest, в которой произошла ошибка, и имя ссылки, которую невозможно разрешить должным образом. Оба этих элемента можно найти в элементе errorstring ответа об ошибке.
Например, в следующей строке ошибки имя политики —
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 Arrest.
Если переменная:
- вне области действия (недоступно в конкретном потоке, в котором выполняется политика) или
- не может быть решено (не определено)
тогда это причина ошибки.
В примере, показанном выше, предполагается, что значение скорости блокировки всплесков в элементе
<Rate>
должно быть получено из заголовка запроса с именемrate . Однако Edge не может разрешить request.header.rate . Это происходит, если скорость заголовка не передается как часть запроса API.Вот пример запроса API, в котором не передается скорость заголовка как часть запроса:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
Поскольку скорость заголовка не передается как часть запроса, ссылка request.header.rate , используемая в элементе
<Rate>
в приведенной выше политике Spike Arrest, не определена и, следовательно, не может быть разрешена. Итак, вы получите код ошибки:policies.ratelimit.FailedToResolveSpikeArrestRate
Разрешение
Убедитесь, что переменная, на которую ссылается элемент <Rate>
, существует/определена и доступна в конкретном потоке, где выполняется политика Spike Arrest.
Чтобы исправить приведенный выше пример, вы можете изменить запрос, включив в него заголовок тарифа , как показано ниже:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"