Skip to content

Commit 1552d67

Browse files
authored
Merge pull request #236096 from pauljewellmsft/pauljewell-v11-queues
Move deprecated client library samples for queues
2 parents 8a9fd8b + 027a027 commit 1552d67

8 files changed

+815
-948
lines changed

articles/storage/queues/TOC.yml

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -207,11 +207,7 @@
207207
- name: Change how data is replicated
208208
href: ../common/redundancy-migration.md?toc=/azure/storage/queues/toc.json
209209
- name: Design highly available applications
210-
items:
211-
- name: .NET (v12 SDK)
212-
href: ../common/geo-redundant-design.md?toc=/azure/storage/queues/toc.json
213-
- name: .NET (v11 SDK)
214-
href: ../common/geo-redundant-design-legacy.md?toc=/azure/storage/queues/toc.json
210+
href: ../common/geo-redundant-design.md?toc=/azure/storage/queues/toc.json
215211
- name: Manage disaster recovery
216212
items:
217213
- name: Check the Last Sync Time property
@@ -367,5 +363,17 @@
367363
href: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/storage
368364
- name: Azure Storage client library version 2.1
369365
href: https://github.com/Azure/azure-storage-python
366+
- name: Code samples using deprecated SDKs
367+
items:
368+
- name: .NET
369+
items:
370+
- name: Version 11.x samples
371+
href: queues-v11-samples-dotnet.md
372+
- name: Design highly available applications (.NET version 11.x)
373+
href: ../common/geo-redundant-design-legacy.md?toc=/azure/storage/queues/toc.json
374+
- name: Java version 8 samples
375+
href: queues-v8-samples-java.md
376+
- name: Python version 2 samples
377+
href: queues-v2-samples-python.md
370378
- name: Compliance offerings
371379
href: ../common/storage-compliance-offerings.md
Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
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

Comments
 (0)