Я создал запущенное веб-задание, используя очередь Azure.Для краткости моя функция выглядит так:
public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message, TextWriter log)
{
log.WriteLine(message);
System.Threading.Thread.Sleep(10000);
}
У меня есть другая функция, которая добавляет элементы в очередь для обработки.Однако я хочу проверить последние xx
сообщения, чтобы определить, существует ли уже элемент в очереди (с тем же сообщением).Примерно так:
while (true)
{
var myMessageId = "98uasd98fusad8";
CloudQueue queue = queueClient.GetQueueReference("myqueue");
queue.CreateIfNotExists();
var maxMessagesToCheck = 99;
var oldMessages = queue.GetMessages(maxMessagesToCheck, null);
if (!oldMessages.Any(x => x.AsString == myMessageId))
{
CloudQueueMessage message = new CloudQueueMessage(myMessageId);
queue.AddMessage(message);
}
}
Тем не менее, я просто не уверен, когда какой-то элемент «выталкивается» из очереди.Отпускается ли он после завершения обработки и возврата функции ProcessQueueMessage
(без ошибки)?Или же оно выталкивается сразу после начала обработки ?
Если элементы отбрасываются после , обработка завершается, тогда моя вторая функция выше будет работать нормально,Однако, если предметы отскочат, как только начнется процесс, мне придется найти другое решение.
Это может быть более краткий способ задать вопрос:
public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message, TextWriter log)
{
//IS THE ITEM IN THE QUEUE POPPED OFF HERE?
log.WriteLine(message);
System.Threading.Thread.Sleep(10000);
} //OR IS THE ITEM IN THE QUEUE POPPED OFF HERE?