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); }
public static async Task Main(string[] args) { ConsoleWindows.Draw(); var receiver = new MessageReceiver(ServiceBusConnectionString, QueueName, ReceiveMode.PeekLock); var receiverCleanUp = new MessageReceiver(ServiceBusConnectionString, QueueName_Cleanup, ReceiveMode.PeekLock); var senderCleanUp = new MessageSender(ServiceBusConnectionString, QueueName_Cleanup); while (true) { await ProcessMessages(receiver, senderCleanUp); await CleanUp(receiverCleanUp, receiver); } }
private static async Task CleanUpAfterProcessing(MessageReceiver receiver, long deferredSequenceNumber, int area = 1) { // once process is complete lets process it try { var message = await receiver.ReceiveDeferredMessageAsync(deferredSequenceNumber); if (message != null) { ConsoleWindows.WriteLine(string.Format("Cleaning up Message: {0}", message.MessageId), area); await receiver.CompleteAsync(message.SystemProperties.LockToken); } } catch (MessageNotFoundException) { return;// it is okay most of the time this is what is expected } }
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); }