コード例 #1
0
        private static async Task ProcessMessages(MessageReceiver receiver, MessageSender senderCleanUp)
        {
            ConsoleWindows.Clear(2);
            ConsoleWindows.WriteLine("Message Receiver", 2);

            do
            {
                var message = await receiver.ReceiveAsync(TimeSpan.FromSeconds(1));

                if (message == null)
                {
                    break;
                }

                ConsoleWindows.WriteLine(string.Format("Message Received{0}", message.MessageId), 2);

                var deferredSequenceNumber = message.SystemProperties.SequenceNumber;
                await PostInCleanUpQueue(senderCleanUp, deferredSequenceNumber);


                await receiver.DeferAsync(message.SystemProperties.LockToken);

                int choice = 1;

                if (processing_choice != 3)
                {
                    ConsoleWindows.WriteLine("Processing Options:", 2);
                    ConsoleWindows.WriteLine(" 1: Sucessful Processing \n 2: Simulate Crash \n 3: Random Mode(for all messages) ", 2);
                    ConsoleWindows.WriteLine("Enter choice: ", 2);
                    var input = Console.ReadLine();
                    Int32.TryParse(input, out choice);

                    if (choice == 3)
                    {
                        processing_choice = 3;
                    }
                }

                if (processing_choice == 3)
                {
                    choice = random.Next(0, 2);
                }


                if (choice == 1)
                {
                    await CleanUpAfterProcessing(receiver, deferredSequenceNumber, 2);
                }
                else
                {
                    ConsoleWindows.WriteLine("Crashed", 2);
                }
            } while (true);
        }
コード例 #2
0
        private static async Task CleanUp(MessageReceiver receiverCleanUpQueue, MessageReceiver receiver)
        {
            ConsoleWindows.Clear(1);
            ConsoleWindows.WriteLine("Message Clean up ...", 1);
            do
            {
                var message = await receiverCleanUpQueue.ReceiveAsync(TimeSpan.FromSeconds(1));

                if (message != null)
                {
                    if (long.TryParse(message.MessageId, out long deferredSequenceNumber))
                    {
                        await CleanUpAfterProcessing(receiver, deferredSequenceNumber, 1);
                    }
                    ConsoleWindows.WriteLine(string.Format("Cleaning up Message: {0}", message.MessageId), 1);
                    await receiverCleanUpQueue.CompleteAsync(message.SystemProperties.LockToken);
                }
                else
                {
                    break;
                }
            } while (true);
        }