2018-07-25T09:45:31.501995759Z { code: 429, 2018-07-25T09:45:31.502027060Z body: '{"code":"429","message":"Message: {\\"Errors\\":[\\"Request rate is large\\"]}\\r\\nActivityId: 1fd09e95-0678-4897-87df-274766c0de82, Request URI: /apps/ab3e9d79-bfe5-4b09-8eb3-a5105669b87a/services/3a9a032c-5d0a-4069-8cf8-...../partitions/9e939522-f114-4e80-841c-...../replicas/131709419380466673p, RequestStats: , SDK: Microsoft.Azure.Documents.Common/2.0.0.0"}', 2018-07-25T09:45:31.502035360Z activityId: '1fd09e95-0678-4897-87df-274766c0de82', 2018-07-25T09:45:31.502040161Z substatus: 3200, 2018-07-25T09:45:31.502044461Z retryAfterInMilliseconds: 7411 }
Я знаю, что вы тоже видели такую проблему. Итак, позвольте мне дать вам несколько рекомендаций, как избежать этой проблемы.
Первый
Вам нужно знать об этой ошибке. Проблема говорит о том, что ваша коллекция превысила установленный предел пропускной способности. Повторите запрос после того, как сервер указал повторную попытку после продолжительности. Для получения дополнительной информации см. единицы запроса.
Если у вас есть несколько клиентов, совокупно работающих с превышением частоты запросов, поведение повтора по умолчанию может быть недостаточным, и клиент выдает приложению DocumentClientException
с кодом состояния 429. В подобных случаях вам может потребоваться рассмотреть возможность обработки поведения и логики повторных попыток в процедурах обработки ошибок вашего приложения или увеличить пропускную способность, предоставленную для контейнера (или набора контейнеров).
Второй
По умолчанию DocumentClientException с кодом состояния 429 возвращается после совокупного времени ожидания в 30 секунд, если запрос продолжает работать с превышением скорости запроса. Это происходит даже в том случае, если текущее число повторных попыток меньше максимального числа повторных попыток, будь то значение по умолчанию 9 или значение, определенное пользователем. Дополнительная информация здесь https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips
Но вы можете изменить параметры по умолчанию с помощью SDK. В моем сценарии я использовал Node.js. (documentdb) - https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-nodejs-application
Итак, вам нужно создать такого клиента,
var docDbClient = new DocumentClient (result.EndpointUrl._, {
masterKey: result.PrimaryAuthorizationKey._,
}, {RequestTimeout: 180000, RetryOptions: {MaxRetryAttemptCount: 20}});
Последний
Последнее, что вы можете сделать, - это создать функцию для повторного запуска вашего метода. Вот пример, как это сделать,
функция executeNextWithRetry (обратный вызов)
{
documents.addItem (обратный вызов, функция (ошибка) {
если (ошибка && код ошибки === 429 && err.retryAfterInMilliseconds)
{
console.log (ошибка);
console.log («Ошибка при добавлении -» + JSON.stringify (callback));
console.log («Повторная попытка после« + err.retryAfterInMilliseconds);
setTimeout (function () {
executeNextWithRetry (обратный вызов);
}, err.retryAfterInMilliseconds);
}
});
}
Удачного кодирования…