Azure PaaS Blog articles

Azure PaaS Blog articles

https://techcommunity.microsoft.com/t5/azure-paas-blog/bg-p/AzurePaaSBlog

Azure PaaS Blog articles

Purge Deferred Messages in Service Bus

Published

Purge Deferred Messages in Service Bus

What are Deferred messages:

Deferred messages refer to messages that a queue or subscription client is unable to process at the moment due to certain circumstances. Instead of processing it immediately, the client can defer the retrieval of the message to a later time, while the message remains in the queue or subscription.

 

Message Deferral | Azure Service Bus

 

Unlike dead-letter messages that are stored in a subqueue, deferred messages are kept in the main queue along with other active messages. However, these messages cannot be received using regular receive operations. If an application loses track of a deferred message, it can be discovered by browsing through the messages.

 

The responsibility of retrieving a deferred message lies with its owner, who must remember the sequence number as it is deferred. A receiver can later retrieve the deferred message by using receive methods that require the sequence number as a parameter. For further details about sequence numbers, please refer to Message sequencing and timestamps.

 

However, it can be very difficult or even unfeasible to get each sequence number from the queue/subscription when the entity contains thousands of messages.

 

Here is an example of how you can receive or purge all the deferred messages in the entity.

 

Pre-requisites:

  • Service Bus namespace

  • Already created queue/subscription

  • Service Bus Explorer

 

Using Service Bus Explorer:

  1. Download the “Service Bus Explorer” from:  https://github.com/paolosalvatori/ServiceBusExplorer

  2. Open service bus explorer and click File and connect it.

         

Mohsin1400_7-1681810258488.png

 

    3. From the drop down, select connection string and provide the connection string of the namespace level.

        

Mohsin1400_8-1681810258492.png

 

    4. Once it is successfully connected, you will see Service Bus Explorer shows the count of Active messages as shown below.

 

Mohsin1400_9-1681810258493.png

 

Mohsin1400_13-1681810429814.png

 

 

    5. When we peek through the messages using Service bus explorer we can see the status of the messages as Deferred.

 

Mohsin1400_14-1681810447929.png

 

   6. When you click on Purge messages, you will notice that the application keeps loading and the messages are not purged.

 

Mohsin1400_15-1681810472068.png

 

 

Receive/Delete messages using C# Code:

 

Run the below code which will receive and complete all the messages from the mentioned queue/subscription after changing the status of deferred to active.

 

 

using Azure.Messaging.ServiceBus; using Microsoft.Azure.Amqp; class Program { static void Main(string[] args) { receiveDeferredMessages(); } public static async Task receiveDeferredMessages() { List<long> sequencenumbers; string connectionString = "SAS Key"; string queueName = "QueueName"; try { bool condition = true; sequencenumbers = new List<long>(); await using var client = new ServiceBusClient(connectionString); ServiceBusReceiver receiver = client.CreateReceiver(queueName); while (condition) { ServiceBusReceivedMessage peekedMessage = await receiver.PeekMessageAsync(); if (peekedMessage != null && peekedMessage.State.ToString() == "Deferred") { sequencenumbers.Add(peekedMessage.SequenceNumber); } else { condition = false; } } var deferredMessage = await receiver.ReceiveDeferredMessagesAsync(sequencenumbers); foreach (var message in deferredMessage) { await receiver.CompleteMessageAsync(message); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } }

 

 

 

 

 

Continue to website...

More from Azure PaaS Blog articles

Related Posts