Skip to main content Início Criadores beko2210 firstbrain azure-storage-queue-ts
azure-storage-queue-ts Azure Queue Storage JavaScript/TypeScript SDK (@azure/storage-queue) for message queue operations. Use for sending, receiving, peeking, and deleting messages in queues.
Ir para a instalação Skills Marketplace Descubra e explore skills de IA criadas pela comunidade.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Copiar promptMostrar detalhes do prompt Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
npx skills add https://github.com/BEKO2210/Firstbrain --skill azure-storage-queue-tsO comando permanece em uma só linha. Role horizontalmente para revisá-lo antes de copiar.
Prefere uma cópia local? Baixe os arquivos disponíveis atualmente no SkillsMP.
Baixar Zip Baixando... Ocupações relacionadas SOC
Baseado na classificação ocupacional SOC
name azure-storage-queue-ts description Azure Queue Storage JavaScript/TypeScript SDK (@azure/storage-queue) for message queue operations. Use for sending, receiving, peeking, and deleting messages in queues. type skill created 2026-02-27T00:00:00.000Z domain cloud-infrastructure category azure risk unknown source community tags ["skill","cloud-infrastructure","azure","storage","queue"]
@azure/storage-queue (TypeScript/JavaScript)
SDK for Azure Queue Storage operations — send, receive, peek, and manage messages in queues.
Installation
npm install @azure/storage-queue @azure/identity
Current Version : 12.x
Node.js : >= 18.0.0
Environment Variables
AZURE_STORAGE_ACCOUNT_NAME=<account-name>
AZURE_STORAGE_ACCOUNT_KEY=<account-key>
AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...
Authentication
DefaultAzureCredential (Recommended)
import { QueueServiceClient } from "@azure/storage-queue" ;
import { DefaultAzureCredential } from "@azure/identity" ;
const accountName = process.env .AZURE_STORAGE_ACCOUNT_NAME !;
const client = new QueueServiceClient (
`https://${accountName} .queue.core.windows.net` ,
new DefaultAzureCredential ()
);
Connection String
import { QueueServiceClient } from "@azure/storage-queue" ;
const client = QueueServiceClient .fromConnectionString (
process.env .AZURE_STORAGE_CONNECTION_STRING !
);
StorageSharedKeyCredential (Node.js only)
import { QueueServiceClient , StorageSharedKeyCredential } ;
accountName = process. . !;
accountKey = process. . !;
sharedKeyCredential = (accountName, accountKey);
client = (
,
sharedKeyCredential
);
from
"@azure/storage-queue"
const
env
AZURE_STORAGE_ACCOUNT_NAME
const
env
AZURE_STORAGE_ACCOUNT_KEY
const
new
StorageSharedKeyCredential
const
new
QueueServiceClient
`https://${accountName} .queue.core.windows.net`
SAS Token import { QueueServiceClient } from "@azure/storage-queue" ;
const accountName = process.env .AZURE_STORAGE_ACCOUNT_NAME !;
const sasToken = process.env .AZURE_STORAGE_SAS_TOKEN !;
const client = new QueueServiceClient (
`https://${accountName} .queue.core.windows.net${sasToken} `
);
Client Hierarchy QueueServiceClient (account level)
└── QueueClient (queue level)
└── Messages (send, receive, peek, delete)
Queue Operations
Create Queue const queueClient = client.getQueueClient ("my-queue" );
await queueClient.create ();
await queueClient.createIfNotExists ();
List Queues for await (const queue of client.listQueues ()) {
console .log (queue.name );
}
for await (const queue of client.listQueues ({ prefix : "task-" })) {
console .log (queue.name );
}
Delete Queue await queueClient.delete ();
await queueClient.deleteIfExists ();
Get Queue Properties const properties = await queueClient.getProperties ();
console .log ("Approximate message count:" , properties.approximateMessagesCount );
console .log ("Metadata:" , properties.metadata );
Set Queue Metadata await queueClient.setMetadata ({
department : "engineering" ,
priority : "high" ,
});
Message Operations
Send Message const queueClient = client.getQueueClient ("my-queue" );
await queueClient.sendMessage ("Hello, World!" );
await queueClient.sendMessage ("Delayed message" , {
visibilityTimeout : 60 ,
messageTimeToLive : 3600 ,
});
const task = { type : "process" , data : { id : 123 } };
await queueClient.sendMessage (JSON .stringify (task));
Receive Messages
const response = await queueClient.receiveMessages ({
numberOfMessages : 10 ,
visibilityTimeout : 30 ,
});
for (const message of response.receivedMessageItems ) {
console .log ("Message ID:" , message.messageId );
console .log ("Content:" , message.messageText );
console .log ("Dequeue Count:" , message.dequeueCount );
console .log ("Pop Receipt:" , message.popReceipt );
await queueClient.deleteMessage (message.messageId , message.popReceipt );
}
Peek Messages Peek without removing from queue (no visibility timeout).
const response = await queueClient.peekMessages ({
numberOfMessages : 5 ,
});
for (const message of response.peekedMessageItems ) {
console .log ("Message ID:" , message.messageId );
console .log ("Content:" , message.messageText );
}
Update Message Extend visibility timeout or update content.
const response = await queueClient.receiveMessages ();
const message = response.receivedMessageItems [0 ];
if (message) {
const updateResponse = await queueClient.updateMessage (
message.messageId ,
message.popReceipt ,
"Updated content" ,
60
);
console .log ("New pop receipt:" , updateResponse.popReceipt );
}
Delete Message
const response = await queueClient.receiveMessages ();
const message = response.receivedMessageItems [0 ];
if (message) {
await queueClient.deleteMessage (message.messageId , message.popReceipt );
}
Clear All Messages await queueClient.clearMessages ();
Message Processing Patterns
Basic Worker Pattern async function processQueue (queueClient : QueueClient ): Promise <void > {
while (true ) {
const response = await queueClient.receiveMessages ({
numberOfMessages : 10 ,
visibilityTimeout : 30 ,
});
if (response.receivedMessageItems .length === 0 ) {
await sleep (5000 );
continue ;
}
for (const message of response.receivedMessageItems ) {
try {
await processMessage (message.messageText );
await queueClient.deleteMessage (message.messageId , message.popReceipt );
} catch (error) {
console .error (`Failed to process message ${message.messageId} :` , error);
}
}
}
}
async function processMessage (content : string ): Promise <void > {
const task = JSON .parse (content);
}
function sleep (ms : number ): Promise <void > {
return new Promise ((resolve ) => setTimeout (resolve, ms));
}
Poison Message Handling const MAX_DEQUEUE_COUNT = 5 ;
async function processWithPoisonHandling (
queueClient : QueueClient ,
poisonQueueClient : QueueClient
): Promise <void > {
const response = await queueClient.receiveMessages ({
numberOfMessages : 10 ,
visibilityTimeout : 30 ,
});
for (const message of response.receivedMessageItems ) {
if (message.dequeueCount > MAX_DEQUEUE_COUNT ) {
await poisonQueueClient.sendMessage (message.messageText );
await queueClient.deleteMessage (message.messageId , message.popReceipt );
console .log (`Moved message ${message.messageId} to poison queue` );
continue ;
}
try {
await processMessage (message.messageText );
await queueClient.deleteMessage (message.messageId , message.popReceipt );
} catch (error) {
console .error (`Processing failed (attempt ${message.dequeueCount} ):` , error);
}
}
}
Batch Processing with Visibility Extension async function processBatchWithExtension (queueClient : QueueClient ): Promise <void > {
const response = await queueClient.receiveMessages ({
numberOfMessages : 1 ,
visibilityTimeout : 60 ,
});
const message = response.receivedMessageItems [0 ];
if (!message) return ;
let popReceipt = message.popReceipt ;
const extensionInterval = setInterval (async () => {
try {
const updateResponse = await queueClient.updateMessage (
message.messageId ,
popReceipt,
message.messageText ,
60
);
popReceipt = updateResponse.popReceipt ;
} catch (error) {
console .error ("Failed to extend visibility:" , error);
}
}, 45000 );
try {
await longRunningProcess (message.messageText );
await queueClient.deleteMessage (message.messageId , popReceipt);
} finally {
clearInterval (extensionInterval);
}
}
Message Encoding By default, messages are Base64 encoded. You can customize this:
import { QueueClient } from "@azure/storage-queue" ;
const queueClient = new QueueClient (
`https://${accountName} .queue.core.windows.net/my-queue` ,
credential,
{
messageEncoding : "text" ,
}
);
const customQueueClient = new QueueClient (
`https://${accountName} .queue.core.windows.net/my-queue` ,
credential,
{
messageEncoding : {
encode : (message : string ) => Buffer .from (message).toString ("base64" ),
decode : (message : string ) => Buffer .from (message, "base64" ).toString (),
},
}
);
SAS Token Generation (Node.js only)
Generate Queue SAS import {
QueueSASPermissions ,
generateQueueSASQueryParameters,
StorageSharedKeyCredential ,
} from "@azure/storage-queue" ;
const sharedKeyCredential = new StorageSharedKeyCredential (accountName, accountKey);
const sasToken = generateQueueSASQueryParameters (
{
queueName : "my-queue" ,
permissions : QueueSASPermissions .parse ("raup" ),
startsOn : new Date (),
expiresOn : new Date (Date .now () + 3600 * 1000 ),
},
sharedKeyCredential
).toString ();
const sasUrl = `https://${accountName} .queue.core.windows.net/my-queue?${sasToken} ` ;
Generate Account SAS import {
AccountSASPermissions ,
AccountSASResourceTypes ,
AccountSASServices ,
generateAccountSASQueryParameters,
} from "@azure/storage-queue" ;
const sasToken = generateAccountSASQueryParameters (
{
services : AccountSASServices .parse ("q" ).toString (),
resourceTypes : AccountSASResourceTypes .parse ("sco" ).toString (),
permissions : AccountSASPermissions .parse ("rwdlacupi" ),
expiresOn : new Date (Date .now () + 24 * 3600 * 1000 ),
},
sharedKeyCredential
).toString ();
Error Handling import { RestError } from "@azure/storage-queue" ;
try {
await queueClient.sendMessage ("test" );
} catch (error) {
if (error instanceof RestError ) {
switch (error.statusCode ) {
case 404 :
console .log ("Queue not found" );
break ;
case 400 :
console .log ("Bad request - message too large or invalid" );
break ;
case 403 :
console .log ("Access denied" );
break ;
case 409 :
console .log ("Queue already exists or being deleted" );
break ;
default :
console .error (`Storage error ${error.statusCode} : ${error.message} ` );
}
}
throw error;
}
TypeScript Types Reference import {
QueueServiceClient ,
QueueClient ,
StorageSharedKeyCredential ,
AnonymousCredential ,
QueueSASPermissions ,
AccountSASPermissions ,
AccountSASServices ,
AccountSASResourceTypes ,
generateQueueSASQueryParameters,
generateAccountSASQueryParameters,
DequeuedMessageItem ,
PeekedMessageItem ,
QueueSendMessageResponse ,
QueueReceiveMessageResponse ,
QueueUpdateMessageResponse ,
QueueItem ,
QueueGetPropertiesResponse ,
RestError ,
} from "@azure/storage-queue" ;
Message Limits Limit Value Max message size 64 KB Max visibility timeout 7 days Max time-to-live 7 days (or -1 for infinite) Max messages per receive 32 Default visibility timeout 30 seconds
Best Practices
Use DefaultAzureCredential — Prefer AAD over connection strings/keys
Always delete after processing — Prevent duplicate processing
Handle poison messages — Move failed messages to a dead-letter queue
Use appropriate visibility timeout — Set based on expected processing time
Extend visibility for long tasks — Update message to prevent timeout
Use JSON for structured data — Serialize objects to JSON strings
Check dequeueCount — Detect repeatedly failing messages
Use batch receive — Receive multiple messages for efficiency
Platform Differences Feature Node.js Browser StorageSharedKeyCredential✅ ❌ SAS generation ✅ ❌ DefaultAzureCredential ✅ ❌ Anonymous/SAS access ✅ ✅ All message operations ✅ ✅
When to Use This skill is applicable to execute the workflow or actions described in the overview.
Connections
Domain: [[Cloud & Infrastruktur]]
Kategorie: [[Microsoft Azure]]
Navigation: [[Skills Uebersicht]], [[Home]]