Purge Deferred Messages in Service Bus

This post has been republished via RSS; it originally appeared at: Microsoft Tech Community - Latest Blogs - .

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.



  • 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.




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




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







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




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





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)
    public static async Task receiveDeferredMessages()
        List<long> sequencenumbers;
        string connectionString = "SAS Key";
        string queueName = "QueueName";

            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")
                    condition = false;

            var deferredMessage = await receiver.ReceiveDeferredMessagesAsync(sequencenumbers);

            foreach (var message in deferredMessage)
                await receiver.CompleteMessageAsync(message);
        catch (Exception ex)






Leave a Reply

Your email address will not be published. Required fields are marked *


This site uses Akismet to reduce spam. Learn how your comment data is processed.