다음을 통해 공유


재시도

적용 대상: 모든 API Management 계층

retry 정책은 자식 정책을 한 번 실행한 후 다시 시도 conditionfalse가 되거나 다시 시도 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만 지정된 경우, 고정된 간격 재시도가 수행됩니다.

  • intervaldelta만 지정하면 선형 간격 다시 시도 알고리즘이 사용됩니다. 다시 시도 사이의 대기 시간은 interval + (count - 1)*delta 수식에 따라 늘어납니다.

  • interval, max-intervaldelta가 지정되면 지수 간격 다시 시도 알고리즘이 적용됩니다. 다시 시도 사이의 대기 시간은 다음 수식에 따라 기하급수적으로 interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2), max-interval에 의해 설정된 최대 간격까지 증가합니다.

    예를 들어 intervaldelta가 모두 10초로 설정되고 max-interval이 100초인 경우 다시 시도 사이의 대략적인 대기 시간은 10초, 20초, 40초, 80초, 100초(남은 다시 시도에 사용된 대기 시간(초))로 증가합니다.

Elements

retry 정책은 다른 정책을 하위 요소로 포함할 수 있습니다.

사용

예제

지수 다시 시도를 사용하여 요청 전달

다음 예제에서는 지수 재시도 알고리즘을 사용하여 요청 전달을 최대 10회까지 다시 시도합니다. first-fast-retryfalse로 설정되어 있으므로 다시 시도하려고 할 때마다 다시 시도 대기 시간이 최대 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>

정책 작업에 대한 자세한 내용은 다음을 참조하세요.