Как использовать Azure CloudQueueClient в веб-API?
У меня есть проект ASP.NET Web API 2.0, работающий в Azure. Основной метод вызывается каждую минуту тысячами удаленных устройств. Кажется, есть проблема с памятью. При запуске API загрузка памяти составляет около 40%. В течение 24 часов это ползет до 80+%, после чего я перезагружаю службу, и память снова падает до 40%, и цикл начинается снова. Это относительно новая проблема, связанная с увеличением количества подключаемых устройств. Я думаю, что некоторый порог был достигнут.
Основной метод, который вызывают удаленные устройства, в основном берет данные об устройстве и помещает их в очередь Azure через CloudQueueClient. Прежде чем загрузка памяти стала проблемой, я создавал новый CloudQueueClient для каждого вызова. Когда я изменил это на глобальный CloudQueueClient, проблемы с памятью, казалось, несколько уменьшились - время, которое потребовалось для перехода с 40% - 80% увеличилось в 10 раз. Вот почему я думаю, что мое использование объектов CloudQueueClient и CloudQueue может быть проблемой.
Я нажимаю данные устройства, используя:
var queue = queueClient.GetQueueReference(queueName);
await queue.AddMessageAsync(new CloudQueueMessage(message));
Где queueClient - мой глобальный экземпляр CloudQueueClient. Как вы можете видеть, я все еще создавал экземпляр CloudClient при каждом вызове. Должен ли я повторно использовать экземпляр CloudClient для каждого вызова.
У меня простой вопрос: как правильно использовать CloudQueueClient и CloudQueue в контексте приложения Web API?
Обратите внимание, что я распределяю входящие сообщения устройства по нескольким очередям, чтобы облегчить загрузку в каждой очереди, чтобы не регулироваться.
1 ответ
Разве устройство не может отправлять данные напрямую в очередь вместо того, чтобы использовать ваш API в качестве посредника? Доступен API для отдыха.
Также эта ссылка может быть полезна:
Вы можете повторно использовать экземпляры CloudQueue и CloudQueueClient.