#azure #.net-core-3.1 #azure-queues
#лазурь #.net-ядро-3.1 #azure-очереди
Вопрос:
Я работаю с функцией Azure (.net 3.1), которая объединяет несколько очередей Azure в одну очередь в качестве способа справедливого определения приоритетов.
Запускаемая каждые 30 секунд функция выполняет следующие действия:
Parallel.ForEach(AzureStorage.QueuesToManage(), new ParallelOptions() { MaxDegreeOfParallelism = 4 } , q =gt; { var messages = q.GetMessagesAsync(Configuration.SliceSize).Result; foreach (var message in messages) { AzureStorage.MainQueue.AddMessageAsync(new CloudQueueMessage(message.AsString)).Wait(); q.DeleteMessageAsync(message).Wait(); }; });
QueuesToManage()
Функция возвращает список очередей, в которых могут быть или не быть сообщения.
Используя Parallel.ForEach
(чтобы не давать определенной очереди абсолютный приоритет), я получаю верхние SliceSize
(в настоящее время 2) сообщения и добавляю их в MainQueue
По мере увеличения числа очередей увеличивается и время, необходимое для этого подхода.
Мне интересно, есть ли:
Более разумный способ извлечь n верхних сообщений из каждой очереди, например Azure.GetMessagesAsync(QueueList, NumberOfMessages)
?
Более быстрый способ перемещения сообщения между очередями, а не мой подход к чтению, повторной постановке в очередь и удалению? Q.MoveMessage(OldQueue, NewQueue)
может быть?
Вероятно, стоит отметить, что я использую этот new CloudQueueMessage(string)
подход, потому AddMessage(msg)
что он не работал на меня, но я не уверен, что это является источником узкого места в производительности.
большое спасибо,
Том