Самый быстрый способ выбрать n лучших сообщений из нескольких очередей Azure

#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) что он не работал на меня, но я не уверен, что это является источником узкого места в производительности.

большое спасибо,

Том