Bik*_*ram 0 azure azure-api-management retrypolicy
我的问题是这样的:
我有一个 Azure APIM,我创建了一个 API 并添加了后端重试策略,如下所示。
<backend>
<retry condition="@("{{Transient-ErrorCode}}".Contains(Convert.ToString(context.Response.StatusCode)))" count="3" interval="5" first-fast-retry="false">
<forward-request />
</retry>
</backend>
Run Code Online (Sandbox Code Playgroud)
服务器第一次返回成功(状态码:200),当它启动重试时遇到以下情况(我也在重试成功,为了测试重试工作正常。)。
forward-request (1.326 ms)
{
"messages": [
"Content length mismatch",
"Content length mismatch"
]
}
Run Code Online (Sandbox Code Playgroud)
请帮助你的想法/经验。
这是因为客户端发送的请求在 APIM 中默认没有缓存在内存中,而是直接从客户端传输到后端。因此,当需要重试时,请求请求负载不存在。我假设您只有具有正文的请求才有问题。
要解决此问题,您首先需要缓存请求正文:
<inbound>
<set-variable name="body" value="@(context.Request.Body.As<string>(preserveContent: true))" />
</inbound>
<backend>
<retry condition="@("{{Transient-ErrorCode}}".Contains(Convert.ToString(context.Response.StatusCode)))" count="3" interval="5" first-fast-retry="false">
<set-body>@((string)context.Variables["body"])</set-body>
<forward-request />
</retry>
</backend>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |