Showing posts with label Azure Queue. Show all posts
Showing posts with label Azure Queue. Show all posts

Clear the Dead Letter messages from an Azure Service Bus Queue

Sometimes we may have a situation to read the message from Dead Letter Queue to know which message are not processed and we may re-queue them if required. In such situations, we can read the messages from the Dead Letter Queue of an Azure Service Bus Queue in the same manner as we connect to the normal queue, but we need to post fix "$DeadLetterQueue" to the queue name.
Following is the code snippet for reading / clearing the messages from Dead Letter Queue.
using Microsoft.ServiceBus.Messaging;

 string serviceBusConnString = "****** Your Service bus Connection String ******";
 string queueName = "Your Queue name" + "/$DeadLetterQueue";  // for dead letter queue.

 QueueClient client = QueueClient.CreateFromConnectionString(serviceBusConnString, queueName, ReceiveMode.PeekLock);
 while (client.Receive() != null)
 {
     var deadMessage = client.Receive();
     //do something here with the message if required.
     deadMessage?.Complete();
 }

Writing and Reading Messages in Azure Queue

You can Send Message to Queue or Read all the Message from Azure Queue using the following code blocks.

Sending Message to Azure Queue

using Microsoft.ServiceBus.Messaging;
private async Task SendMessageToQueue(string message)
{
     string serviceBusConnString = "****** Your Service bus Connection String ******";

     string queueName = "Your Queue name";

     QueueClient client = QueueClient.CreateFromConnectionString(serviceBusConnString, queueName, ReceiveMode.PeekLock);

     BrokeredMessage brokeredMessage = new BrokeredMessage(message);

     brokeredMessage.TimeToLive = new TimeSpan(3, 0, 0);

      await client.SendAsync(brokeredMessage);

}

Reading all the Message from Azure Queue

using Microsoft.ServiceBus.Messaging;

private async Task ReadMessagesFromQueue(string message)
{

     string serviceBusConnString = "****** Your Service bus Connection String ******";

     string queueName = "Your Queue name";

     QueueClient client = QueueClient.CreateFromConnectionString(serviceBusConnString, queueName, ReceiveMode.PeekLock);
     if (client != null)
       {

           BrokeredMessage brokeredMessage = null;
           while (true)
              {

                 try
                    {

                       //receive messages from Queue

                       brokeredMessage = await client.ReceiveAsync();

                       if (brokeredMessage != null)
                        {

                          Console.WriteLine(string.Format("Message received: Id = {0}, Body = {1}", brokeredMessage.MessageId, brokeredMessage.GetBody()));

                          // Further custom message processing could go here…

                          brokeredMessage.Complete();

                        }

                        else
                        {
                            //no more messages in the queue
                            break;
                        }
                    }
                  catch (MessagingException e)
                    {

                       if (!e.IsTransient)
                        {
                            Console.WriteLine(e.Message);
                            throw;
                        }
                        else
                        {
                            Console.WriteLine(e.Message);
                            Console.WriteLine("Transient error occured. Will retry in 2 seconds");
                            Thread.Sleep(2000);
                        }
                    }
                }

                client.Close();
            }

        }