You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Azure APIM在运维时段返回带Retry-After头的503响应

Azure APIM 运维场景返回503+动态Retry-After实现方案

完全可以通过Azure APIM的自定义策略能力实现该需求,具体方案如下:

实现逻辑

通过在对应生效范围(全局/指定产品/指定API/指定操作)配置入站策略,判断当前是否处于预设的运维窗口期,符合条件则直接返回503响应,同时动态计算当前时间到运维结束的剩余秒数作为Retry-After响应头的值。

配置步骤

  • 登录Azure APIM管理界面,进入「策略」配置页,选择你需要生效的范围
  • 替换/补充入站策略为以下示例内容,只需修改maintenanceEndTime变量的值为你实际的运维结束UTC时间即可
<policies>
    <inbound>
        <base />
        <!-- 配置运维结束的UTC时间,执行运维前修改此值即可生效 -->
        <set-variable name="maintenanceEndTime" value="@(new DateTime(2024, 6, 30, 14, 30, 0, DateTimeKind.Utc))" />
        <!-- 动态计算剩余等待秒数 -->
        <set-variable name="retryAfter" value="@(Math.Max(0, (int)((DateTime)context.Variables["maintenanceEndTime"] - DateTime.UtcNow).TotalSeconds))" />
        <choose>
            <!-- 剩余等待秒数大于0则返回503 -->
            <when condition="@((int)context.Variables["retryAfter"] > 0)">
                <return-response>
                    <set-status code="503" reason="Service Under Maintenance" />
                    <set-header name="Retry-After" exists-action="override">
                        <value>@((int)context.Variables["retryAfter"])</value>
                    </set-header>
                    <set-body>服务正在进行运维维护,请稍后再试</set-body>
                </return-response>
            </when>
        </choose>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

附加说明

  • 运维结束后直接删除或注释上述策略代码即可恢复正常流量转发,无需重启服务
  • 如需仅对部分后端服务生效,可在when节点的判断条件中补充请求路径、后端服务地址等匹配规则
  • 示例中Retry-After的值为实时计算的剩余秒数,每次请求都会返回最新的倒计时数值,符合需求

内容的提问来源于stack exchange,提问作者Jaime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:30:03