An Azure Storage Queue wrapper that supports priorities and abstracts exponential backoff polling away with an event-driven interface
-- This is just an MVP at this stage, contributions welcome to get this fully featured!
Install-Package AMPSoft.AzurePriorityPushQueue
varqueue=newAzurePriorityPushQueue("<connection string>","<queue-name>");// Messages are added to Default queue by... defaultqueue.AddMessage("Default");// Or you can specify a specific priority queuequeue.AddMessage("Low",QueuePriority.Low);queue.AddMessage("Default",QueuePriority.Default);queue.AddMessage("High",QueuePriority.High);// Get the length of a specific queuequeue.ApproximateMessageCount(QueuePriority.Low);// returns 1// Get the sum of all queue lengthsqueue.ApproximateMessageCount();// returns 3// Register an event handler to handle dequeues// Under the covers, it will poll with exponential backoff, up to a max of 30 seconds in between pollingsqueue.MessageReceived+=(o,e)=>{Console.WriteLine(e.MessageWrapper.Message.AsString);e.MessageWrapper.Delete();};// Or, you can register to receive multiple messages at once (default 32, settable with DequeueCount)queue.MessagesReceived+=(o,e)=>{Parallel.ForEach(e.MessageWrappers,newParallelOptions{MaxDegreeOfParallelism=Environment.ProcessorCount}, m =>{Console.WriteLine(m.Message.AsString);m.Delete();});};