示例#1
0
        //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));
                }
            }
        }
示例#2
0
        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));
                }
            }
        }