Skip to content

Commit f8bebb5

Browse files
authored
Merge pull request #224567 from diberry/diberry/0120-storage-queue-encoding
JS - queue - s365, public issue 78550
2 parents 7c5ae56 + 55d7396 commit f8bebb5

File tree

1 file changed

+13
-200
lines changed

1 file changed

+13
-200
lines changed

articles/storage/queues/storage-nodejs-how-to-use-queues.md

Lines changed: 13 additions & 200 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ description: Learn to use the Azure Queue Storage to create and delete queues. L
55
author: normesta
66
ms.author: normesta
77
ms.reviewer: dineshm
8-
ms.date: 12/21/2020
8+
ms.date: 01/20/2023
99
ms.topic: how-to
1010
ms.service: storage
1111
ms.subservice: queues
@@ -39,150 +39,70 @@ The [Azure Storage client library for JavaScript](https://github.com/Azure/azure
3939

4040
1. Use a command-line interface such as PowerShell (Windows), Terminal (Mac), or Bash (Unix), navigate to the folder where you created your sample application.
4141

42-
# [JavaScript v12 SDK](#tab/javascript)
43-
4442
1. Type `npm install @azure/storage-queue` in the command window.
4543

4644
1. Verify that a `node_modules` folder was created. Inside that folder you'll find the `@azure/storage-queue` package, which contains the client library you need to access storage.
4745

48-
# [JavaScript v2](#tab/javascript2)
49-
50-
1. Type `npm install azure-storage` in the command window.
51-
52-
1. Verify that a `node_modules` folder was created. Inside that folder, you'll find the `azure-storage` package, which contains the libraries you need to access storage.
53-
54-
---
55-
5646
### Import the package
5747

5848
Using your code editor, add the following to the top the JavaScript file where you intend to use queues.
5949

60-
# [JavaScript v12 SDK](#tab/javascript)
61-
6250
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_ImportStatements":::
6351

64-
# [JavaScript v2](#tab/javascript2)
65-
66-
```javascript
67-
var azure = require('azure-storage');
68-
```
69-
70-
---
7152

7253
## How to create a queue
7354

74-
# [JavaScript v12 SDK](#tab/javascript)
7555

7656
The following code gets the value of an environment variable called `AZURE_STORAGE_CONNECTION_STRING` and uses it to create a [`QueueServiceClient`](/javascript/api/@azure/storage-queue/queueserviceclient) object. This object is then used to create a [`QueueClient`](/javascript/api/@azure/storage-queue/queueclient) object that allows you to work with a specific queue.
7757

7858
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_CreateQueue":::
7959

8060
If the queue already exists, an exception is thrown.
8161

82-
# [JavaScript v2](#tab/javascript2)
62+
## How to format the message
8363

84-
The Azure module will read the environment variables `AZURE_STORAGE_ACCOUNT` and `AZURE_STORAGE_ACCESS_KEY`, or `AZURE_STORAGE_CONNECTION_STRING` for information required to connect to your Azure Storage account. If these environment variables aren't set, you must specify the account information when calling `createQueueService`.
64+
The message type is a string. All messages are treated as strings. If you need to send a different data type, you need to serialize that datatype into a string when sending the message and deserialize the string format when reading the message.
8565

86-
The following code creates a `QueueService` object, which enables you to work with queues.
66+
To convert **JSON** to a string format and back again in Node.js, use the following helper functions:
8767

8868
```javascript
89-
var queueSvc = azure.createQueueService();
90-
```
91-
92-
Call the `createQueueIfNotExists` method to create a new queue with the specified name or return the queue if it already exists.
93-
94-
```javascript
95-
queueSvc.createQueueIfNotExists('myqueue', function(error, results, response){
96-
if(!error){
97-
// Queue created or exists
98-
}
99-
});
100-
```
101-
102-
If the queue is created, `result.created` is true. If the queue exists, `result.created` is false.
103-
104-
---
69+
function jsonToBase64(jsonObj) {
70+
const jsonString = JSON.stringify(jsonObj)
71+
return Buffer.from(jsonString).toString('base64')
72+
}
73+
function encodeBase64ToJson(base64String) {
74+
const jsonString = Buffer.from(base64String,'base64').toString()
75+
return JSON.parse(jsonString)
76+
}
77+
```
10578

10679
## How to insert a message into a queue
10780

108-
# [JavaScript v12 SDK](#tab/javascript)
10981

11082
To add a message to a queue, call the [`sendMessage`](/javascript/api/@azure/storage-queue/queueclient#sendmessage-string--queuesendmessageoptions-) method.
11183

11284
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_AddMessage":::
11385

114-
# [JavaScript v2](#tab/javascript2)
115-
116-
To insert a message into a queue, call the `createMessage` method to create a new message and add it to the queue.
117-
118-
```javascript
119-
queueSvc.createMessage('myqueue', "Hello, World", function(error, results, response){
120-
if(!error){
121-
// Message inserted
122-
}
123-
});
124-
```
125-
126-
---
12786

12887
## How to peek at the next message
12988

13089
You can peek at messages in the queue without removing them from the queue by calling the `peekMessages` method.
13190

132-
# [JavaScript v12 SDK](#tab/javascript)
13391

13492
By default, [`peekMessages`](/javascript/api/@azure/storage-queue/queueclient#peekmessages-queuepeekmessagesoptions-) peeks at a single message. The following example peeks at the first five messages in the queue. If fewer than five messages are visible, just the visible messages are returned.
13593

13694
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_PeekMessage":::
13795

138-
# [JavaScript v2](#tab/javascript2)
139-
140-
By default, `peekMessages` peeks at a single message.
141-
142-
```javascript
143-
queueSvc.peekMessages('myqueue', function(error, results, response){
144-
if(!error){
145-
// Message text is in results[0].messageText
146-
}
147-
});
148-
```
149-
150-
The `result` contains the message.
151-
152-
---
153-
15496
Calling `peekMessages` when there are no messages in the queue won't return an error. However, no messages are returned.
15597

15698
## How to change the contents of a queued message
15799

158100
The following example updates the text of a message.
159101

160-
# [JavaScript v12 SDK](#tab/javascript)
161-
162102
Change the contents of a message in-place in the queue by calling [`updateMessage`](/javascript/api/@azure/storage-queue/queueclient#updatemessage-string--string--string--number--queueupdatemessageoptions-).
163103

164104
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_UpdateMessage":::
165105

166-
# [JavaScript v2](#tab/javascript2)
167-
168-
Change the contents of a message in-place in the queue by calling `updateMessage`.
169-
170-
```javascript
171-
queueSvc.getMessages('myqueue', function(error, getResults, getResponse){
172-
if(!error){
173-
// Got the message
174-
var message = getResults[0];
175-
queueSvc.updateMessage('myqueue', message.messageId, message.popReceipt, 10, {messageText: 'new text'}, function(error, updateResults, updateResponse){
176-
if(!error){
177-
// Message updated successfully
178-
}
179-
});
180-
}
181-
});
182-
```
183-
184-
---
185-
186106
## How to dequeue a message
187107

188108
Dequeueing a message is a two-stage process:
@@ -193,8 +113,6 @@ Dequeueing a message is a two-stage process:
193113

194114
The following example gets a message, then deletes it.
195115

196-
# [JavaScript v12 SDK](#tab/javascript)
197-
198116
To get a message, call the [`receiveMessages`](/javascript/api/@azure/storage-queue/queueclient#receivemessages-queuereceivemessageoptions-) method. This call makes the messages invisible in the queue, so no other clients can process them. Once your application has processed a message, call [`deleteMessage`](/javascript/api/@azure/storage-queue/queueclient#deletemessage-string--string--queuedeletemessageoptions-) to delete it from the queue.
199117

200118
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_DequeueMessage":::
@@ -203,34 +121,8 @@ By default, a message is only hidden for 30 seconds. After 30 seconds it's visib
203121

204122
Calling `receiveMessages` when there are no messages in the queue won't return an error. However, no messages will be returned.
205123

206-
# [JavaScript v2](#tab/javascript2)
207-
208-
To get a message, call the `getMessages` method. This call makes the messages invisible in the queue, so no other clients can process them. Once your application has processed a message, call `deleteMessage` to delete it from the queue.
209-
210-
```javascript
211-
queueSvc.getMessages('myqueue', function(error, results, response){
212-
if(!error){
213-
// Message text is in results[0].messageText
214-
var message = results[0];
215-
queueSvc.deleteMessage('myqueue', message.messageId, message.popReceipt, function(error, response){
216-
if(!error){
217-
//message deleted
218-
}
219-
});
220-
}
221-
});
222-
```
223-
224-
By default, a message is only hidden for 30 seconds. After 30 seconds it's visible to other clients. You can specify a different value by using `options.visibilityTimeout` with `getMessages`.
225-
226-
Using `getMessages` when there are no messages in the queue won't return an error. However, no messages will be returned.
227-
228-
---
229-
230124
## Additional options for dequeuing messages
231125

232-
# [JavaScript v12 SDK](#tab/javascript)
233-
234126
There are two ways you can customize message retrieval from a queue:
235127

236128
- [`options.numberOfMessages`](/javascript/api/@azure/storage-queue/queuereceivemessageoptions#numberofmessages): Retrieve a batch of messages (up to 32).
@@ -240,106 +132,27 @@ The following example uses the `receiveMessages` method to get five messages in
240132

241133
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_DequeueMessages":::
242134

243-
# [JavaScript v2](#tab/javascript2)
244-
245-
There are two ways you can customize message retrieval from a queue:
246-
247-
- `options.numOfMessages`: Retrieve a batch of messages (up to 32).
248-
- `options.visibilityTimeout`: Set a longer or shorter invisibility timeout.
249-
250-
The following example uses the `getMessages` method to get 15 messages in one call. Then it processes each message using a `for` loop. It also sets the invisibility timeout to five minutes for all messages returned by this method.
251-
252-
```javascript
253-
queueSvc.getMessages('myqueue', {numOfMessages: 15, visibilityTimeout: 5 * 60}, function(error, results, getResponse){
254-
if(!error){
255-
// Messages retrieved
256-
for(var index in results){
257-
// text is available in result[index].messageText
258-
var message = results[index];
259-
queueSvc.deleteMessage(queueName, message.messageId, message.popReceipt, function(error, deleteResponse){
260-
if(!error){
261-
// Message deleted
262-
}
263-
});
264-
}
265-
}
266-
});
267-
```
268-
269-
---
270-
271135
## How to get the queue length
272136

273-
# [JavaScript v12 SDK](#tab/javascript)
274137

275138
The [`getProperties`](/javascript/api/@azure/storage-queue/queueclient#getproperties-queuegetpropertiesoptions-) method returns metadata about the queue, including the approximate number of messages waiting in the queue.
276139

277140
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_QueueLength":::
278141

279-
# [JavaScript v2](#tab/javascript2)
280-
281-
The `getQueueMetadata` method returns metadata about the queue, including the approximate number of messages waiting in the queue.
282-
283-
```javascript
284-
queueSvc.getQueueMetadata('myqueue', function(error, results, response){
285-
if(!error){
286-
// Queue length is available in results.approximateMessageCount
287-
}
288-
});
289-
```
290-
291-
---
292-
293142
## How to list queues
294143

295-
# [JavaScript v12 SDK](#tab/javascript)
296-
297144
To retrieve a list of queues, call [`QueueServiceClient.listQueues`](/javascript/api/@azure/storage-queue/servicelistqueuesoptions#prefix). To retrieve a list filtered by a specific prefix, set [options.prefix](/javascript/api/@azure/storage-queue/servicelistqueuesoptions#prefix) in your call to `listQueues`.
298145

299146
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_ListQueues":::
300147

301-
# [JavaScript v2](#tab/javascript2)
302-
303-
To retrieve a list of queues, use `listQueuesSegmented`. To retrieve a list filtered by a specific prefix, use `listQueuesSegmentedWithPrefix`.
304-
305-
```javascript
306-
queueSvc.listQueuesSegmented(null, function(error, results, response){
307-
if(!error){
308-
// results.entries contains the list of queues
309-
}
310-
});
311-
```
312-
313-
If all queues can't be returned, pass `result.continuationToken` as the first parameter of `listQueuesSegmented` or the second parameter of `listQueuesSegmentedWithPrefix` to retrieve more results.
314-
315-
---
316-
317148
## How to delete a queue
318149

319-
# [JavaScript v12 SDK](#tab/javascript)
320-
321150
To delete a queue and all the messages contained in it, call the [`DeleteQueue`](/javascript/api/@azure/storage-queue/queueclient#delete-queuedeleteoptions-) method on the `QueueClient` object.
322151

323152
:::code language="javascript" source="~/azure-storage-snippets/queues/howto/JavaScript/JavaScript-v12/javascript-queues-v12.js" id="Snippet_DeleteQueue":::
324153

325154
To clear all messages from a queue without deleting it, call [`ClearMessages`](/javascript/api/@azure/storage-queue/queueclient#clearmessages-queueclearmessagesoptions-).
326155

327-
# [JavaScript v2](#tab/javascript2)
328-
329-
To delete a queue and all the messages contained in it, call the `deleteQueue` method on the queue object.
330-
331-
```javascript
332-
queueSvc.deleteQueue(queueName, function(error, response){
333-
if(!error){
334-
// Queue has been deleted
335-
}
336-
});
337-
```
338-
339-
To clear all messages from a queue without deleting it, call `clearMessages`.
340-
341-
---
342-
343156
[!INCLUDE [storage-check-out-samples-all](../../../includes/storage-check-out-samples-all.md)]
344157

345158
## Next steps

0 commit comments

Comments
 (0)