Есть ли способ повторить ошибки 'BackendConnectionFailure при передаче-ответа' в Azure API Management - PullRequest
0 голосов
/ 15 апреля 2020

У меня периодически возникают проблемы со связью со старым унаследованным API, который иногда вызывает ошибку 'BackendConnectionFailure at Transfer-response' из Azure Управление API. Из моего опыта повторная попытка запроса к устаревшему 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, похоже, указывает на то, что Backend Dependency имеет статус вызова = ложь, но код результата = 200.

Есть ли способ обнаружить это состояние, чтобы повторить попытку, или какие-либо другие политики, которые можно использовать?

1 Ответ

0 голосов
/ 24 апреля 2020

В приведенной выше политике повторные попытки охватывают только получение кода состояния ответа и заголовков из внутреннего интерфейса. Тело ответа не является предварительно прочитанным APIM и вместо этого передается напрямую из бэкэнда в клиент по частям. Это то, что означает «передача ответа». К этому времени все ваши политики уже выполнены.

Один из способов избежать этого - заблаговременно буферизовать ответ от серверной части на стороне APIM. Попробуйте добавить в качестве исходной вещи в первую очередь:

<set-body>@(context.Response.Body.As<byte[]>())</set-body>
...