Skip to main content سوق المهارات اكتشف واستكشف مهارات الذكاء الاصطناعي التي بناها المجتمع.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
نسخ Promptعرض تفاصيل Prompt يتجاوز الأمر المباشر Prompt المخصّص للمراجعة. افحص المصدر قبل تشغيله.
npx skills add https://github.com/BEKO2210/Firstbrain --skill azure-storage-queue-tsيبقى الأمر في سطر واحد. مرّر أفقيًا لمراجعته كاملًا قبل النسخ.
تفضّل نسخة محلية؟ نزّل الملفات المتاحة حاليًا لدى SkillsMP.
تحميل Zip جاري التحميل... 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
);
المهن ذات الصلة SOC
استنادا إلى تصنيف SOC المهني
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]]