현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
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>
요소가 지정된 급증 저지 정책이 하나 이상 있을 수 있습니다.예를 들어 다음 정책은
message_weight:
라는 흐름 변수를 통해<MessageWeight>
값을 지정합니다.<?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단계에서 식별된 값과 일치한다면, 이는 오류의 원인이 됩니다.
예를 들어 아래와 같아 요청 메서드에 따라
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
값을 정수로 수정하면 됩니다.
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>
요소 내에 속도 설정이 포함된 변수의 참조를 급증 저지 정책에서의 값으로 확인할 수 없는 경우에 발생합니다. 이 요소는 필수이며 {int}pm
또는 {int}ps
형식으로 급증 저지 속도를 지정하는 데 사용됩니다. 예를 들어 {int}pm
는 500pm
일 수 있으며, 이는 분당 호출 500회을 의미합니다. 마찬가지로 10ps
값은 초당 호출 10회를 의미합니다.
진단
오류가 발생한 급증 저지 정책과 제대로 확인할 수 없는 참조의 이름을 확인합니다. 두 항목은 모두 오류 응답의 faultstring 요소에서 찾을 수 있습니다.
예를 들어 다음 faultstring에서 정책 이름은
SpikeArrest_AuthProxy
이고 참조는request.header.rate
입니다."faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
실패한 급증 저지 정책 XML에서, 사용된 참조 이름이 오류 문자열(위의 1단계)에서 식별된 참조 이름과 일치하는지 확인합니다. ** **
예를 들어 다음 정책은
faultstring에서 식별된 이름과 일치하는 를 설정합니다.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>
변수가 급증 저지 정책이 실행되는 흐름에서 정의되고 사용 가능한지 확인합니다.
변수가 다음 중 하나인 경우
- 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
- 확인할 수 없는 경우(정의되지 않음)
이는 오류의 원인이 됩니다.
위에 표시된 예시에서
<Rate>
요소의 급증 저지 속도 값은 rate라는 요청 헤더에서 검색되어야 합니다. 하지만 Edge는 request.header.rate를 확인할 수 없습니다. 이 문제는 헤더 rate가 API 요청의 일부로 전달되지 않은 경우에 발생합니다.다음은 헤더 rate를 요청의 일부로 전달하지 않는 샘플 API 요청입니다.
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
헤더 rate는 요청의 일부로 전달되지 않으므로, 위의 급증 저지 정책의
<Rate>
요소에 사용된 참조 request.header.rate는 정의되지 않고 이에 따라 확인할 수 없습니다. 따라서 다음과 같은 오류 코드가 수신됩니다.policies.ratelimit.FailedToResolveSpikeArrestRate
해결 방법
<Rate>
요소에서 참조된 변수가 존재하거나 정의되었으며 이를 급증 저지 정책이 실행되는 특정 흐름에서 사용 가능한지 확인합니다.
위에 표시된 예시를 수정하려면 아래와 같이 요청에 rate 헤더가 포함되도록 요청을 수정하면 됩니다.
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"