//private static async void ProcessQueueAsync() private static async Task ProcessQueueAsync() { StorageService storageService = new StorageService(); var queue = storageService.Queue1; var table = storageService.Table1; while (true) { var messagesResponse = await queue.ReceiveMessagesAsync(); var messages = messagesResponse.Value; if (messages.Any()) { foreach (var message in messages) { string messageString = message.MessageText; if (message.DequeueCount > 2) { var badMessage = new BadMessage { PartitionKey = "BadMessages", RowKey = Guid.NewGuid().ToString(), Text = messageString }; var insertOperation = TableOperation.Insert(badMessage); await table.ExecuteAsync(insertOperation); var response = await queue.DeleteMessageAsync(message.MessageId, message.PopReceipt); Console.WriteLine($"Message \"{messageString}\" deleted"); } else { try { var requestMessage = JsonConvert.DeserializeObject <ServiceRequestMessage>(messageString); Console.WriteLine($"Broken item: {requestMessage.ItemName}{Environment.NewLine}Problem description: {requestMessage.Problem}"); var response = await queue.DeleteMessageAsync(message.MessageId, message.PopReceipt); } catch (Exception ex) { Console.WriteLine("Tried to process bad message"); } } } } else { await Task.Delay(TimeSpan.FromSeconds(10)); } } }
private static async Task ProcessQueueAsync() { StorageService storageService = new StorageService(); var queue = storageService.Queue; var table = storageService.Table; Console.WriteLine("Listening to a queue changes"); while (true) // Уходим в бесконечный цикл проверки наличия сообщений { var message = await queue.GetMessageAsync(); if (message != null) // Есть сообщение { string messageString = message.AsString; if (message.DequeueCount > 2) { var badMessage = new BadMessage { PartitionKey = "BadMessages", RowKey = Guid.NewGuid().ToString(), Text = messageString }; var insertOperation = TableOperation.Insert(badMessage); await table.ExecuteAsync(insertOperation); await queue.DeleteMessageAsync(message); Console.WriteLine($"Message \"{messageString}\" deleted"); } else { try { // Попробуем десериализовать сообщение // в объект объявленный ниже var requestMessage = JsonConvert. DeserializeObject <ServiceRequestMessage> (messageString); Console.WriteLine($"Broken item: {requestMessage.ItemName}" + $"{Environment.NewLine}Problem description: " + $"{requestMessage.Problem}" + Environment.NewLine); // Десериализация прошла успешно // Удалим сообщение из очереди await queue.DeleteMessageAsync(message); } catch (Exception ex) { Console.WriteLine("[Exception] Tried to process bad message\n"); // Десериализация прошла не успешно // Сообщение вернётся в очередь само через 5 минут } } } else // Нет сообщения, подождём 10 сек { await Task.Delay(TimeSpan.FromSeconds(10)); } } }