Microsoft Graph SDK для.NET автоматически обрабатывает ограничения скорости?
Microsoft ограничивает определенные конечные точки Graph до 10 000 запросов в 10 минут ( источник). Если предел достигнут, Retry-After
В заголовке указывается время ожидания перед отправкой другого запроса.
Это автоматически обрабатывается Graph SDK? Если нет, какие шаги должен предпринять абонент?
1 ответ
Я не верю, что Graph C# SDK автоматически повторяет попытки при ограничении запросов, но есть пример по адресу https://github.com/venkateshchepuru/aspnet-webhooks-rest-sample/blob/87b1aa4967392096d22d382b7a8848bd9c0afeea/GraphWebhooks/Helpers/GraphHttpClient.cs, который показывает логику экспоненциального отката для 429 и 503 с.
В этом примере также используется ряд других передовых методов - максимальное количество повторных попыток, идентификаторы и временные метки запросов на регистрацию, экспоненциальный откат и т. Д.
Код для разбора повторной попытки после заголовка:
private TimeSpan GetServerRecommendedPause(HttpResponseMessage response)
{
var retryAfter = response?.Headers?.RetryAfter;
if (retryAfter == null)
return TimeSpan.Zero;
return retryAfter.Date.HasValue
? retryAfter.Date.Value - DateTime.UtcNow
: retryAfter.Delta.GetValueOrDefault(TimeSpan.Zero);
}
Код для определения использования повторного заголовка или экспоненциального отката:
if (((int)response.StatusCode == 429) || ((int)response.StatusCode == 503))
{
// Retry Only After the server specified time period obtained from the response.
TimeSpan pauseDuration = TimeSpan.FromSeconds(Math.Pow(2, attempt));
TimeSpan serverRecommendedPauseDuration = GetServerRecommendedPause(response);
if (serverRecommendedPauseDuration > pauseDuration)
{
pauseDuration = serverRecommendedPauseDuration;
}