재시도
적용 대상: 모든 API Management 계층
retry
정책은 자식 정책을 한 번 실행한 후 다시 시도 condition
이 false
가 되거나 다시 시도 count
를 모두 사용할 때까지 실행을 다시 시도합니다.
참고 항목
정책 문에 제공된 순서대로 정책의 요소 및 자식 요소를 설정합니다. API Management 정책을 설정하거나 편집하는 방법에 대해 자세히 알아봅니다.
정책 문
<retry
condition="Boolean expression or literal"
count="number of retry attempts"
interval="retry interval in seconds"
max-interval="maximum retry interval in seconds"
delta="retry interval delta in seconds"
first-fast-retry="boolean expression or literal">
<!-- One or more child policies. No restrictions. -->
</retry>
특성
특성 | 설명 | 필수 항목 | 기본값 |
---|---|---|---|
condition | 부울입니다. 다시 시도를 중지할지(false ) 또는 계속할지(true ) 지정합니다. 정책 식이 허용됩니다. |
예 | 해당 없음 |
count | 시도할 다시 시도 횟수를 지정하는 1에서 50 사이의 양수입니다. 정책 식이 허용됩니다. | 예 | 해당 없음 |
interval | 재시도 횟수 간에 대기 간격을 지정하는 양수(초)입니다. 정책 식이 허용됩니다. | 예 | 해당 없음 |
max-interval | 재시도 횟수 간에 최대 대기 간격을 지정하는 양수(초)입니다. 지수 재시도 알고리즘을 구현하는 데 사용됩니다. 정책 식이 허용됩니다. | 아니요 | 해당 없음 |
delta | 대기 간격 증분을 지정하는 양수(초)입니다. 선형 및 지수 재시도 알고리즘을 구현하는 데 사용됩니다. 정책 식이 허용됩니다. | 아니요 | 해당 없음 |
first-fast-retry | 부울입니다. true 로 설정하면 첫 번째 다시 시도가 즉시 수행됩니다. 정책 식이 허용됩니다. |
아니요 | false |
다시 시도 대기 시간
interval
만 지정된 경우, 고정된 간격 재시도가 수행됩니다.interval
및delta
만 지정하면 선형 간격 다시 시도 알고리즘이 사용됩니다. 다시 시도 사이의 대기 시간은interval + (count - 1)*delta
수식에 따라 늘어납니다.interval
,max-interval
및delta
가 지정되면 지수 간격 다시 시도 알고리즘이 적용됩니다. 다시 시도 사이의 대기 시간은 다음 수식에 따라 기하급수적으로interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2)
,max-interval
에 의해 설정된 최대 간격까지 증가합니다.예를 들어
interval
및delta
가 모두 10초로 설정되고max-interval
이 100초인 경우 다시 시도 사이의 대략적인 대기 시간은 10초, 20초, 40초, 80초, 100초(남은 다시 시도에 사용된 대기 시간(초))로 증가합니다.
Elements
retry
정책은 다른 정책을 하위 요소로 포함할 수 있습니다.
사용
- 정책 섹션: inbound, outbound, backend, on-error
- 정책 범위: 전역, 작업 영역, 제품, API, 작업
- 게이트웨이: 클래식, v2, 사용량, 자체 호스팅, 작업 영역
예제
지수 다시 시도를 사용하여 요청 전달
다음 예제에서는 지수 재시도 알고리즘을 사용하여 요청 전달을 최대 10회까지 다시 시도합니다. first-fast-retry
가 false
로 설정되어 있으므로 다시 시도하려고 할 때마다 다시 시도 대기 시간이 최대 max-interval
까지 기하급수적으로 증가합니다(이 예에서는 약 10초, 20초, 40초, ...).
<retry
condition="@(context.Response.StatusCode == 500)"
count="10"
interval="10"
max-interval="100"
delta="10"
first-fast-retry="false">
<forward-request buffer-request-body="true" />
</retry>
초기 요청 실패 시 요청 보내기
다음 예제에서는 연결이 끊어지거나 시간이 초과되거나 요청으로 서버 쪽 오류가 발생하는 경우 정의된 백 엔드 이외의 URL로 요청을 보내는 것이 최대 세 번 다시 시도됩니다. first-fast-retry
가 true로 설정되었으므로 첫 번째 재시도는 초기 요청 실패 시 즉시 실행됩니다. 오류가 발생할 경우 response-variable-name
이 null이 되도록 하려면 send-request
에서 ignore-error
를 true로 설정해야 합니다.
<retry
condition="@(context.Variables["response"] == null || ((IResponse)context.Variables["response"]).StatusCode >= 500)"
count="3"
interval="1"
first-fast-retry="true">
<send-request
mode="new"
response-variable-name="response"
timeout="3"
ignore-error="true">
<set-url>https://api.contoso.com/products/5</set-url>
<set-method>GET</set-method>
</send-request>
</retry>
관련 정책
관련 콘텐츠
정책 작업에 대한 자세한 내용은 다음을 참조하세요.
- 자습서: API 변환 및 보호
- 정책 문 및 해당 설정에 대한 전체 목록에 대한 정책 참조
- 정책 식
- 정책 설정 또는 편집
- 정책 구성 재사용
- 정책 코드 조각 리포지토리
- Azure의 Microsoft Copilot을 사용하는 작성자 정책