Guest Mohsin1400 Posted May 17, 2023 Posted May 17, 2023 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: Download the “Service Bus Explorer” from: GitHub - paolosalvatori/ServiceBusExplorer: The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs. 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) { 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 reading... Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.