Как использовать Azure CloudQueueClient в веб-API? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть проект 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 Ответ

0 голосов
/ 27 апреля 2018

Не может ли устройство отправить данные напрямую в очередь вместо того, чтобы использовать ваш API в качестве посредника? Доступен остальные API .

Также эта ссылка может быть полезна:

Вы можете повторно использовать экземпляры CloudQueue и CloudQueueClient.

...