|
| 1 | +--- |
| 2 | +title: Azure Queue Storage code samples using .NET version 11.x client libraries |
| 3 | +titleSuffix: Azure Storage |
| 4 | +description: View code samples that use the Azure Queue Storage client library for .NET version 11.x. |
| 5 | +services: storage |
| 6 | +author: pauljewellmsft |
| 7 | +ms.service: storage |
| 8 | +ms.subservice: queues |
| 9 | +ms.topic: how-to |
| 10 | +ms.date: 04/26/2023 |
| 11 | +ms.author: pauljewell |
| 12 | +--- |
| 13 | + |
| 14 | +# Azure Queue Storage code samples using .NET version 11.x client libraries |
| 15 | + |
| 16 | +This article shows code samples that use version 11.x of the Azure Queue Storage client library for .NET. |
| 17 | + |
| 18 | +[!INCLUDE [storage-v11-sdk-support-retirement](../../../includes/storage-v11-sdk-support-retirement.md)] |
| 19 | + |
| 20 | +## Create a Queue Storage client |
| 21 | + |
| 22 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#create-the-queue-storage-client) |
| 23 | + |
| 24 | +The [`CloudQueueClient`](/dotnet/api/microsoft.azure.storage.queue.cloudqueueclient?view=azure-dotnet-legacy&preserve-view=true) class enables you to retrieve queues stored in Queue Storage. Here's one way to create the service client: |
| 25 | + |
| 26 | +```csharp |
| 27 | +// Retrieve storage account from connection string |
| 28 | +CloudStorageAccount storageAccount = CloudStorageAccount.Parse( |
| 29 | + CloudConfigurationManager.GetSetting("StorageConnectionString")); |
| 30 | + |
| 31 | +// Create the queue client |
| 32 | +CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); |
| 33 | +``` |
| 34 | + |
| 35 | +## Create a queue |
| 36 | + |
| 37 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#create-a-queue) |
| 38 | + |
| 39 | +This example shows how to create a queue: |
| 40 | + |
| 41 | +```csharp |
| 42 | +// Retrieve storage account from connection string |
| 43 | +CloudStorageAccount storageAccount = CloudStorageAccount.Parse( |
| 44 | + CloudConfigurationManager.GetSetting("StorageConnectionString")); |
| 45 | + |
| 46 | +// Create the queue client |
| 47 | +CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); |
| 48 | + |
| 49 | +// Retrieve a reference to a queue |
| 50 | +CloudQueue queue = queueClient.GetQueueReference("myqueue"); |
| 51 | + |
| 52 | +// Create the queue if it doesn't already exist |
| 53 | +queue.CreateIfNotExists(); |
| 54 | +``` |
| 55 | + |
| 56 | +## Insert a message into a queue |
| 57 | + |
| 58 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#insert-a-message-into-a-queue) |
| 59 | + |
| 60 | +To insert a message into an existing queue, first create a new [`CloudQueueMessage`](/dotnet/api/microsoft.azure.storage.queue.cloudqueuemessage?view=azure-dotnet-legacy&preserve-view=true). Next, call the [`AddMessage`](/dotnet/api/microsoft.azure.storage.queue.cloudqueue.addmessage?view=azure-dotnet-legacy&preserve-view=true) method. A `CloudQueueMessage` can be created from either a string (in UTF-8 format) or a byte array. The following code example creates a queue (if it doesn't already exist) and inserts the message `Hello, World`: |
| 61 | + |
| 62 | +```csharp |
| 63 | +// Retrieve storage account from connection string |
| 64 | +CloudStorageAccount storageAccount = CloudStorageAccount.Parse( |
| 65 | + CloudConfigurationManager.GetSetting("StorageConnectionString")); |
| 66 | + |
| 67 | +// Create the queue client |
| 68 | +CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); |
| 69 | + |
| 70 | +// Retrieve a reference to a queue |
| 71 | +CloudQueue queue = queueClient.GetQueueReference("myqueue"); |
| 72 | + |
| 73 | +// Create the queue if it doesn't already exist |
| 74 | +queue.CreateIfNotExists(); |
| 75 | + |
| 76 | +// Create a message and add it to the queue |
| 77 | +CloudQueueMessage message = new CloudQueueMessage("Hello, World"); |
| 78 | +queue.AddMessage(message); |
| 79 | +``` |
| 80 | + |
| 81 | +## Peek at the next message |
| 82 | + |
| 83 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#peek-at-the-next-message) |
| 84 | + |
| 85 | +You can peek at the message in the front of a queue without removing it from the queue by calling the [`PeekMessage`](/dotnet/api/microsoft.azure.storage.queue.cloudqueue.peekmessage?view=azure-dotnet-legacy&preserve-view=true) method. |
| 86 | + |
| 87 | +```csharp |
| 88 | +// Retrieve storage account from connection string |
| 89 | +CloudStorageAccount storageAccount = CloudStorageAccount.Parse( |
| 90 | + CloudConfigurationManager.GetSetting("StorageConnectionString")); |
| 91 | + |
| 92 | +// Create the queue client |
| 93 | +CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); |
| 94 | + |
| 95 | +// Retrieve a reference to a queue |
| 96 | +CloudQueue queue = queueClient.GetQueueReference("myqueue"); |
| 97 | + |
| 98 | +// Peek at the next message |
| 99 | +CloudQueueMessage peekedMessage = queue.PeekMessage(); |
| 100 | + |
| 101 | +// Display message. |
| 102 | +Console.WriteLine(peekedMessage.AsString); |
| 103 | +``` |
| 104 | + |
| 105 | +## Change the contents of a queued message |
| 106 | + |
| 107 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#change-the-contents-of-a-queued-message) |
| 108 | + |
| 109 | +```csharp |
| 110 | +// Retrieve storage account from connection string. |
| 111 | +CloudStorageAccount storageAccount = CloudStorageAccount.Parse( |
| 112 | + CloudConfigurationManager.GetSetting("StorageConnectionString")); |
| 113 | + |
| 114 | +// Create the queue client. |
| 115 | +CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); |
| 116 | + |
| 117 | +// Retrieve a reference to a queue. |
| 118 | +CloudQueue queue = queueClient.GetQueueReference("myqueue"); |
| 119 | + |
| 120 | +// Get the message from the queue and update the message contents. |
| 121 | +CloudQueueMessage message = queue.GetMessage(); |
| 122 | +message.SetMessageContent2("Updated contents.", false); |
| 123 | +queue.UpdateMessage(message, |
| 124 | + TimeSpan.FromSeconds(60.0), // Make it invisible for another 60 seconds. |
| 125 | + MessageUpdateFields.Content | MessageUpdateFields.Visibility); |
| 126 | +``` |
| 127 | + |
| 128 | +## Dequeue the next message |
| 129 | + |
| 130 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#dequeue-the-next-message) |
| 131 | + |
| 132 | +Your code dequeues a message from a queue in two steps. When you call [`GetMessage`](/dotnet/api/microsoft.azure.storage.queue.cloudqueue.getmessage?view=azure-dotnet-legacy&preserve-view=true), you get the next message in a queue. A message returned from `GetMessage` becomes invisible to any other code reading messages from this queue. By default, this message stays invisible for 30 seconds. To finish removing the message from the queue, you must also call [`DeleteMessage`](/dotnet/api/microsoft.azure.storage.queue.cloudqueue.deletemessage?view=azure-dotnet-legacy&preserve-view=true). This two-step process of removing a message assures that if your code fails to process a message due to hardware or software failure, another instance of your code can get the same message and try again. Your code calls `DeleteMessage` right after the message has been processed. |
| 133 | + |
| 134 | +```csharp |
| 135 | +// Retrieve storage account from connection string |
| 136 | +CloudStorageAccount storageAccount = CloudStorageAccount.Parse( |
| 137 | + CloudConfigurationManager.GetSetting("StorageConnectionString")); |
| 138 | + |
| 139 | +// Create the queue client |
| 140 | +CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); |
| 141 | + |
| 142 | +// Retrieve a reference to a queue |
| 143 | +CloudQueue queue = queueClient.GetQueueReference("myqueue"); |
| 144 | + |
| 145 | +// Get the next message |
| 146 | +CloudQueueMessage retrievedMessage = queue.GetMessage(); |
| 147 | + |
| 148 | +//Process the message in less than 30 seconds, and then delete the message |
| 149 | +queue.DeleteMessage(retrievedMessage); |
| 150 | +``` |
| 151 | + |
| 152 | +## Use the async-await pattern with common Queue Storage APIs |
| 153 | + |
| 154 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#use-the-async-await-pattern-with-common-queue-storage-apis) |
| 155 | + |
| 156 | +```csharp |
| 157 | +// Create the queue if it doesn't already exist |
| 158 | +if(await queue.CreateIfNotExistsAsync()) |
| 159 | +{ |
| 160 | + Console.WriteLine("Queue '{0}' Created", queue.Name); |
| 161 | +} |
| 162 | +else |
| 163 | +{ |
| 164 | + Console.WriteLine("Queue '{0}' Exists", queue.Name); |
| 165 | +} |
| 166 | + |
| 167 | +// Create a message to put in the queue |
| 168 | +CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message"); |
| 169 | + |
| 170 | +// Async enqueue the message |
| 171 | +await queue.AddMessageAsync(cloudQueueMessage); |
| 172 | +Console.WriteLine("Message added"); |
| 173 | + |
| 174 | +// Async dequeue the message |
| 175 | +CloudQueueMessage retrievedMessage = await queue.GetMessageAsync(); |
| 176 | +Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString); |
| 177 | + |
| 178 | +// Async delete the message |
| 179 | +await queue.DeleteMessageAsync(retrievedMessage); |
| 180 | +Console.WriteLine("Deleted message"); |
| 181 | +``` |
| 182 | + |
| 183 | +## Use additional options for dequeuing messages |
| 184 | + |
| 185 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#use-additional-options-for-dequeuing-messages) |
| 186 | + |
| 187 | +The following code example uses the [`GetMessages`](/dotnet/api/microsoft.azure.storage.queue.cloudqueue.getmessages?view=azure-dotnet-legacy&preserve-view=true) method to get 20 messages in one call. Then it processes each message using a `foreach` loop. It also sets the invisibility timeout to five minutes for each message. The timeout starts for all messages at the same time, so after five minutes have passed since the call to `GetMessages`, any messages that haven't been deleted will become visible again. |
| 188 | + |
| 189 | +```csharp |
| 190 | +// Retrieve storage account from connection string. |
| 191 | +CloudStorageAccount storageAccount = CloudStorageAccount.Parse( |
| 192 | + CloudConfigurationManager.GetSetting("StorageConnectionString")); |
| 193 | + |
| 194 | +// Create the queue client. |
| 195 | +CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); |
| 196 | + |
| 197 | +// Retrieve a reference to a queue. |
| 198 | +CloudQueue queue = queueClient.GetQueueReference("myqueue"); |
| 199 | + |
| 200 | +foreach (CloudQueueMessage message in queue.GetMessages(20, TimeSpan.FromMinutes(5))) |
| 201 | +{ |
| 202 | + // Process all messages in less than 5 minutes, deleting each message after processing. |
| 203 | + queue.DeleteMessage(message); |
| 204 | +} |
| 205 | +``` |
| 206 | + |
| 207 | +## Get the queue length |
| 208 | + |
| 209 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#get-the-queue-length) |
| 210 | + |
| 211 | +You can get an estimate of the number of messages in a queue. The [`FetchAttributes`](/dotnet/api/microsoft.azure.storage.queue.cloudqueue.fetchattributes?view=azure-dotnet-legacy&preserve-view=true) method returns queue attributes including the message count. The [`ApproximateMessageCount`](/dotnet/api/microsoft.azure.storage.queue.cloudqueue.approximatemessagecount?view=azure-dotnet-legacy&preserve-view=true) property returns the last value retrieved by the `FetchAttributes` method, without calling Queue Storage. |
| 212 | + |
| 213 | +```csharp |
| 214 | +// Retrieve storage account from connection string. |
| 215 | +CloudStorageAccount storageAccount = CloudStorageAccount.Parse( |
| 216 | + CloudConfigurationManager.GetSetting("StorageConnectionString")); |
| 217 | + |
| 218 | +// Create the queue client. |
| 219 | +CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); |
| 220 | + |
| 221 | +// Retrieve a reference to a queue. |
| 222 | +CloudQueue queue = queueClient.GetQueueReference("myqueue"); |
| 223 | + |
| 224 | +// Fetch the queue attributes. |
| 225 | +queue.FetchAttributes(); |
| 226 | + |
| 227 | +// Retrieve the cached approximate message count. |
| 228 | +int cachedMessageCount = queue.ApproximateMessageCount; |
| 229 | + |
| 230 | +// Display number of messages. |
| 231 | +Console.WriteLine("Number of messages in queue: " + cachedMessageCount); |
| 232 | +``` |
| 233 | + |
| 234 | +## Delete a queue |
| 235 | + |
| 236 | +Related article: [Get started with Azure Queue Storage using .NET](storage-dotnet-how-to-use-queues.md#delete-a-queue) |
| 237 | + |
| 238 | +To delete a queue and all the messages contained in it, call the [`Delete`](/dotnet/api/microsoft.azure.storage.queue.cloudqueue.delete?view=azure-dotnet-legacy&preserve-view=true) method on the queue object. |
| 239 | + |
| 240 | +```csharp |
| 241 | +// Retrieve storage account from connection string. |
| 242 | +CloudStorageAccount storageAccount = CloudStorageAccount.Parse( |
| 243 | + CloudConfigurationManager.GetSetting("StorageConnectionString")); |
| 244 | + |
| 245 | +// Create the queue client. |
| 246 | +CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); |
| 247 | + |
| 248 | +// Retrieve a reference to a queue. |
| 249 | +CloudQueue queue = queueClient.GetQueueReference("myqueue"); |
| 250 | + |
| 251 | +// Delete the queue. |
| 252 | +queue.Delete(); |
| 253 | +``` |
| 254 | + |
| 255 | +## Work with queues |
| 256 | + |
| 257 | +Related article: [Work with Azure Queue Storage queues in .NET](storage-tutorial-queues.md) |
| 258 | + |
| 259 | +In your project directory, add the following packages using the `dotnet add package` command: |
| 260 | + |
| 261 | + ```console |
| 262 | + dotnet add package Microsoft.Azure.Storage.Common |
| 263 | + ``` |
| 264 | + |
| 265 | + ```console |
| 266 | + dotnet add package Microsoft.Azure.Storage.Queue |
| 267 | + ``` |
| 268 | + |
| 269 | +Full code sample: |
| 270 | + |
| 271 | +:::code language="csharp" source="~/azure-storage-snippets/queues/tutorial/dotnet/dotnet-v11/QueueApp/Program.cs" id="snippet_AllCode"::: |
0 commit comments