我与一个旧的遗留 api 之间存在间歇性连接问题,该问题有时会导致 Azure API 管理部门返回 "BackendConnectionFailure at transfer-response "错误。根据我的经验,重试对旧版 api 的请求通常会成功。我有一个类似于下面的重试策略,正在检查 5xx 状态代码,但是,重试似乎没有发生。
<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>
经过进一步的研究,Application Insights似乎表明后端依赖的调用状态=false,但结果代码=200。
有什么方法可以检测到这种情况,从而进行重试,或者有什么其他策略可以使用?
在您的上述策略中,重试仅涵盖从后端接收响应状态代码和头信息。APIM 不会主动读取响应体,而是直接从后端逐个传输到客户端。这就是 "传输响应 "的意思。那个时候你所有的策略都已经完成了。
避免这种情况的方法之一是在APIM端主动缓冲来自后端的响应。试着在出站时首先添加。
<set-body>@(context.Response.Body.As<byte[]>())</set-body>