Create and manage Azure Queue Storage and messages by using .NET

Waqas Ahmed
6 min readMay 24, 2023

--

Create and manage Azure Queue Storage and messages by using .NET
Deep Dive into Azure Queue Storage: Asynchronous Messaging for Distributed Systems

Azure Queue Storage is a message queuing service provided by Microsoft Azure. It is designed to facilitate asynchronous communication and decouple components or services within a distributed application.

In Azure Queue Storage, messages are stored in queues and processed by the application at a later time. This allows for asynchronous and scalable communication between different components of an application, enabling better reliability, scalability, and performance.

Here are some key features of Azure Queue Storage:

  1. Message Queuing: Azure Queue Storage allows you to store a large number of messages in a queue. Each message can be up to 64 KB in size and can contain any type of text-based data.
  2. Scalability and Performance: Queue Storage is built to handle high message throughput and provides elastic scalability. You can easily scale your application to handle increasing message loads without worrying about the underlying infrastructure.
  3. Asynchronous Processing: Messages in the queue can be processed by multiple consumers asynchronously. This allows for decoupling the sender and receiver components, enabling them to work independently and at their own pace.
  4. Reliable Delivery: Azure Queue Storage ensures reliable message delivery. Once a message is added to the queue, it remains there until it is explicitly dequeued by a consumer. In case of failures or errors during processing, messages can be retried or processed again.
  5. Time-Based Visibility: Messages in the queue can have a visibility timeout, which determines how long a message remains invisible to other consumers after it has been dequeued by one consumer. This feature allows for implementing delayed processing or handling messages by multiple consumers in a controlled manner.

Azure Queue Storage can be integrated with various Azure services and tools to build robust and scalable applications. It is commonly used in scenarios such as decoupling components, handling background processing, workload balancing, and implementing task queues.

Create the Queue service client:

To create a Queue service client using .NET Core, you can use the Azure.Storage.Queues package. Here’s an example of creating a Queue service client in .NET Core:

  1. Install the Azure.Storage.Queues package:
dotnet add package Azure.Storage.Queues

2. Import the necessary namespaces:

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

3. Create the Queue service client:

string connectionString = "<your_connection_string>";
QueueServiceClient queueServiceClient = new QueueServiceClient(connectionString);

In the above code, replace <your_connection_string> with the actual connection string for your Azure Storage account.

Once you have the Queue service client created, you can use it to perform various operations such as creating queues, sending messages to queues, receiving and processing messages, and deleting queues or messages.

Create a queue:

Here’s an example of how to create a queue using the Queue service client in .NET Core:

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

string connectionString = "<your_connection_string>";
string queueName = "myqueue";

QueueServiceClient queueServiceClient = new QueueServiceClient(connectionString);
QueueClient queueClient = queueServiceClient.GetQueueClient(queueName);

queueClient.CreateIfNotExists();

In the code above, replace <your_connection_string> with the actual connection string for your Azure Storage account. You can also replace "myqueue" with the desired name for your queue.

The CreateIfNotExists() method will create the queue if it doesn't already exist. If the queue already exists, the method will not make any changes.

After executing the code, you will have a queue named “myqueue” (or the name you specified) created in your Azure Storage account.

Insert a message into a queue:

Here’s an example of how to insert a message into a queue using the Queue service client in .NET Core:

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

string connectionString = "<your_connection_string>";
string queueName = "myqueue";
string messageContent = "Hello, Azure Queue Storage!";

QueueServiceClient queueServiceClient = new QueueServiceClient(connectionString);
QueueClient queueClient = queueServiceClient.GetQueueClient(queueName);

queueClient.SendMessage(messageContent);

In the code above, replace <your_connection_string> with the actual connection string for your Azure Storage account. Also, make sure to use the correct queueName that corresponds to the queue you want to insert the message into.

The SendMessage() method is used to insert a message into the queue. The messageContent variable contains the actual content of the message you want to send.

After executing the code, a new message with the specified content will be added to the specified queue in your Azure Storage account.

Peek at the next message:

To peek at the next message in a queue using the Queue service client in .NET Core, you can use the PeekMessages() method. Here's an example:

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

string connectionString = "<your_connection_string>";
string queueName = "myqueue";

QueueServiceClient queueServiceClient = new QueueServiceClient(connectionString);
QueueClient queueClient = queueServiceClient.GetQueueClient(queueName);

Response<PeekedMessage[]> peekedMessagesResponse = queueClient.PeekMessages(maxMessages: 1);
if (peekedMessagesResponse.Value.Length > 0)
{
PeekedMessage peekedMessage = peekedMessagesResponse.Value[0];
string messageContent = peekedMessage.MessageText;
string messageId = peekedMessage.MessageId;
string popReceipt = peekedMessage.PopReceipt;

// Use the message content, ID, and pop receipt as needed
Console.WriteLine("Peeked message content: " + messageContent);
Console.WriteLine("Message ID: " + messageId);
Console.WriteLine("Pop Receipt: " + popReceipt);
}
else
{
Console.WriteLine("No messages available in the queue.");
}

In the code above, replace <your_connection_string> with the actual connection string for your Azure Storage account. Also, ensure that queueName corresponds to the name of the queue you want to peek at.

The PeekMessages() method is called with maxMessages set to 1 to peek at the next message in the queue. If there are messages available, the code retrieves the first message's content, ID, and pop receipt. You can use this information as needed.

Note that peeking at a message does not remove it from the queue. It allows you to view the message without affecting its visibility or removal status.

Dequeue the next message:

To dequeue (retrieve and remove) the next message from a queue using the Queue service client in .NET Core, you can use the ReceiveMessages() method. Here's an example:

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

string connectionString = "<your_connection_string>";
string queueName = "myqueue";

QueueServiceClient queueServiceClient = new QueueServiceClient(connectionString);
QueueClient queueClient = queueServiceClient.GetQueueClient(queueName);

Response<QueueMessage[]> receivedMessagesResponse = queueClient.ReceiveMessages(maxMessages: 1);
if (receivedMessagesResponse.Value.Length > 0)
{
QueueMessage receivedMessage = receivedMessagesResponse.Value[0];
string messageContent = receivedMessage.MessageText;
string messageId = receivedMessage.MessageId;
string popReceipt = receivedMessage.PopReceipt;

// Process the message content, ID, and pop receipt as needed
Console.WriteLine("Dequeued message content: " + messageContent);
Console.WriteLine("Message ID: " + messageId);
Console.WriteLine("Pop Receipt: " + popReceipt);

// Delete the message from the queue
queueClient.DeleteMessage(receivedMessage.MessageId, receivedMessage.PopReceipt);
}
else
{
Console.WriteLine("No messages available in the queue.");
}

In the code above, replace <your_connection_string> with the actual connection string for your Azure Storage account. Also, ensure that queueName corresponds to the name of the queue you want to dequeue from.

The ReceiveMessages() method is called with maxMessages set to 1 to retrieve the next available message from the queue. If there are messages available, the code retrieves the first message's content, ID, and pop receipt. You can process the message content and perform any required operations.

After processing the message, the code uses DeleteMessage() to remove the message from the queue. This ensures that the message is not returned again in subsequent dequeue operations.

Note that the ReceiveMessages() method retrieves and removes the message from the queue atomically. If the application crashes or fails to delete the message after retrieval, the message will become visible again in the queue after the visibility timeout period.

Get the queue length:

To get the length (number of messages) in a queue using the Queue service client in .NET Core, you can use the GetProperties() method. Here's an example:

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

string connectionString = "<your_connection_string>";
string queueName = "myqueue";

QueueServiceClient queueServiceClient = new QueueServiceClient(connectionString);
QueueClient queueClient = queueServiceClient.GetQueueClient(queueName);

Response<QueueProperties> queuePropertiesResponse = queueClient.GetProperties();
int queueLength = queuePropertiesResponse.Value.ApproximateMessagesCount;

Console.WriteLine("Queue length: " + queueLength);

In the code above, replace <your_connection_string> with the actual connection string for your Azure Storage account. Also, ensure that queueName corresponds to the name of the queue for which you want to get the length.

The GetProperties() method retrieves the properties of the queue, including the approximate number of messages in the queue. The ApproximateMessagesCount property of the QueueProperties object gives you the estimated count of messages in the queue.

After executing the code, the queueLength variable will contain the number of messages in the specified queue. You can then use this value as needed for further processing or displaying the queue length.

Delete a queue:

To delete a queue using the Queue service client in .NET Core, you can use the DeleteIfExists() method. Here's an example:

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

string connectionString = "<your_connection_string>";
string queueName = "myqueue";

QueueServiceClient queueServiceClient = new QueueServiceClient(connectionString);
QueueClient queueClient = queueServiceClient.GetQueueClient(queueName);

queueClient.DeleteIfExists();

In the code above, replace <your_connection_string> with the actual connection string for your Azure Storage account. Also, ensure that queueName corresponds to the name of the queue you want to delete.

The DeleteIfExists() method is called on the QueueClient instance to delete the queue if it exists. If the queue does not exist, the method will not raise an exception.

After executing the code, the queue with the specified name will be deleted from your Azure Storage account, if it exists.

--

--

Waqas Ahmed

Microsoft Azure Enthusiast ☁ | Principal Software Engineer | Angular | React.Js | .Net Core | .Net | Azure | Micro Services 👉 https://bit.ly/3AhEyOz