如何设置Azure重试策略例外?

时间:2019-08-01 00:05:39

标签: azure azure-api-management azure-policy

我已在Azure APIM中设置重试策略以跟踪503错误。

<backend>
    <retry condition="@(context.Response.StatusCode == 503)" count="3" interval="5" first-fast-retry="true">
        <forward-request buffer-request-body="true" />
    </retry>
</backend>

当后端api出现连接问题时,我们尝试3次,然后放弃重试。

这很好用,尽管即使内部错误被捕获为503,我们也会得到500内部服务器错误作为响应。

我们如何获得出站正确的返回码503?

1 个答案:

答案 0 :(得分:0)

找到了答案,您可以使用该政策的“出错时”部分

<on-error>
    <set-header name="ErrorMessage" exists-action="override">
        <value>@(context.LastError.Message)</value>
    </set-header>
    <!--
    <set-header name="ErrorSource" exists-action="override">
        <value>@(context.LastError.Source)</value>
    </set-header>
    <set-header name="ErrorReason" exists-action="override">
        <value>@(context.LastError.Reason)</value>
    </set-header>                
    <set-header name="ErrorScope" exists-action="override">
        <value>@(context.LastError.Scope)</value>
    </set-header>
    <set-header name="ErrorSection" exists-action="override">
        <value>@(context.LastError.Section)</value>
    </set-header>
    <set-header name="ErrorPath" exists-action="override">
        <value>@(context.LastError.Path)</value>
    </set-header>
    <set-header name="ErrorPolicyId" exists-action="override">
        <value>@(context.LastError.PolicyId)</value>
    </set-header>
    <set-header name="ErrorStatusCode" exists-action="override">
        <value>@(context.Response.StatusCode.ToString())</value>
    </set-header>
    -->
</on-error>