{"id":"e3d5c3da-c199-4e4a-8c8f-6cb4786ffa93","shortId":"RjVFZL","kind":"skill","title":"azure-servicebus-ts","tagline":"Enterprise messaging with queues, topics, and subscriptions.","description":"# Azure Service Bus SDK for TypeScript\n\nEnterprise messaging with queues, topics, and subscriptions.\n\n## Installation\n\n```bash\nnpm install @azure/service-bus @azure/identity\n```\n\n## Environment Variables\n\n```bash\nSERVICEBUS_NAMESPACE=<namespace>.servicebus.windows.net\nSERVICEBUS_QUEUE_NAME=my-queue\nSERVICEBUS_TOPIC_NAME=my-topic\nSERVICEBUS_SUBSCRIPTION_NAME=my-subscription\n```\n\n## Authentication\n\n```typescript\nimport { ServiceBusClient } from \"@azure/service-bus\";\nimport { DefaultAzureCredential } from \"@azure/identity\";\n\nconst fullyQualifiedNamespace = process.env.SERVICEBUS_NAMESPACE!;\nconst client = new ServiceBusClient(fullyQualifiedNamespace, new DefaultAzureCredential());\n```\n\n## Core Workflow\n\n### Send Messages to Queue\n\n```typescript\nconst sender = client.createSender(\"my-queue\");\n\n// Single message\nawait sender.sendMessages({\n  body: { orderId: \"12345\", amount: 99.99 },\n  contentType: \"application/json\",\n});\n\n// Batch messages\nconst batch = await sender.createMessageBatch();\nbatch.tryAddMessage({ body: \"Message 1\" });\nbatch.tryAddMessage({ body: \"Message 2\" });\nawait sender.sendMessages(batch);\n\nawait sender.close();\n```\n\n### Receive Messages from Queue\n\n```typescript\nconst receiver = client.createReceiver(\"my-queue\");\n\n// Receive batch\nconst messages = await receiver.receiveMessages(10, { maxWaitTimeInMs: 5000 });\nfor (const message of messages) {\n  console.log(`Received: ${message.body}`);\n  await receiver.completeMessage(message);\n}\n\nawait receiver.close();\n```\n\n### Subscribe to Messages (Event-Driven)\n\n```typescript\nconst receiver = client.createReceiver(\"my-queue\");\n\nconst subscription = receiver.subscribe({\n  processMessage: async (message) => {\n    console.log(`Processing: ${message.body}`);\n    // Message auto-completed on success\n  },\n  processError: async (args) => {\n    console.error(`Error: ${args.error}`);\n  },\n});\n\n// Stop after some time\nsetTimeout(async () => {\n  await subscription.close();\n  await receiver.close();\n}, 60000);\n```\n\n### Topics and Subscriptions\n\n```typescript\n// Send to topic\nconst topicSender = client.createSender(\"my-topic\");\nawait topicSender.sendMessages({\n  body: { event: \"order.created\", data: { orderId: \"123\" } },\n  applicationProperties: { eventType: \"order.created\" },\n});\n\n// Receive from subscription\nconst subscriptionReceiver = client.createReceiver(\"my-topic\", \"my-subscription\");\nconst messages = await subscriptionReceiver.receiveMessages(10);\n```\n\n## Message Sessions\n\n```typescript\n// Send session message\nconst sender = client.createSender(\"session-queue\");\nawait sender.sendMessages({\n  body: { step: 1, data: \"First step\" },\n  sessionId: \"workflow-123\",\n});\n\n// Receive session messages\nconst sessionReceiver = await client.acceptSession(\"session-queue\", \"workflow-123\");\nconst messages = await sessionReceiver.receiveMessages(10);\n\n// Get/set session state\nconst state = await sessionReceiver.getSessionState();\nawait sessionReceiver.setSessionState(Buffer.from(JSON.stringify({ progress: 50 })));\n\nawait sessionReceiver.close();\n```\n\n## Dead-Letter Handling\n\n```typescript\n// Move to dead-letter\nawait receiver.deadLetterMessage(message, {\n  deadLetterReason: \"Validation failed\",\n  deadLetterErrorDescription: \"Missing required field: orderId\",\n});\n\n// Process dead-letter queue\nconst dlqReceiver = client.createReceiver(\"my-queue\", { subQueueType: \"deadLetter\" });\nconst dlqMessages = await dlqReceiver.receiveMessages(10);\nfor (const msg of dlqMessages) {\n  console.log(`DLQ Reason: ${msg.deadLetterReason}`);\n  // Reprocess or log\n  await dlqReceiver.completeMessage(msg);\n}\n```\n\n## Scheduled Messages\n\n```typescript\nconst sender = client.createSender(\"my-queue\");\n\n// Schedule for future delivery\nconst scheduledTime = new Date(Date.now() + 60000); // 1 minute from now\nconst sequenceNumber = await sender.scheduleMessages(\n  { body: \"Delayed message\" },\n  scheduledTime\n);\n\n// Cancel scheduled message\nawait sender.cancelScheduledMessages(sequenceNumber);\n```\n\n## Message Deferral\n\n```typescript\n// Defer message for later\nawait receiver.deferMessage(message);\n\n// Receive deferred message by sequence number\nconst deferredMessage = await receiver.receiveDeferredMessages(message.sequenceNumber!);\nawait receiver.completeMessage(deferredMessage[0]);\n```\n\n## Peek Messages (Non-Destructive)\n\n```typescript\nconst receiver = client.createReceiver(\"my-queue\");\n\n// Peek without removing\nconst peekedMessages = await receiver.peekMessages(10);\nfor (const msg of peekedMessages) {\n  console.log(`Peeked: ${msg.body}`);\n}\n```\n\n## Key Types\n\n```typescript\nimport {\n  ServiceBusClient,\n  ServiceBusSender,\n  ServiceBusReceiver,\n  ServiceBusSessionReceiver,\n  ServiceBusMessage,\n  ServiceBusReceivedMessage,\n  ProcessMessageCallback,\n  ProcessErrorCallback,\n} from \"@azure/service-bus\";\n```\n\n## Receive Modes\n\n```typescript\n// Peek-Lock (default) - message locked until completed/abandoned\nconst receiver = client.createReceiver(\"my-queue\", { receiveMode: \"peekLock\" });\nawait receiver.completeMessage(message);   // Remove from queue\nawait receiver.abandonMessage(message);    // Return to queue\nawait receiver.deferMessage(message);      // Defer for later\nawait receiver.deadLetterMessage(message); // Move to DLQ\n\n// Receive-and-Delete - message removed immediately\nconst receiver = client.createReceiver(\"my-queue\", { receiveMode: \"receiveAndDelete\" });\n```\n\n## Best Practices\n\n1. **Use Entra ID auth** - Avoid connection strings in production\n2. **Reuse clients** - Create `ServiceBusClient` once, share across senders/receivers\n3. **Close resources** - Always close senders/receivers when done\n4. **Handle errors** - Implement `processError` callback for subscription receivers\n5. **Use sessions for ordering** - When message order matters within a group\n6. **Configure dead-letter** - Always handle DLQ messages\n7. **Batch sends** - Use `createMessageBatch()` for multiple messages\n\n## Reference Documentation\n\nFor detailed patterns, see:\n\n- Queues vs Topics Patterns - Queue/topic patterns, sessions, receive modes, message settlement\n- Error Handling and Reliability - ServiceBusError codes, DLQ handling, lock renewal, graceful shutdown\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","servicebus","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-azure-servicebus-ts","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-servicebus-ts","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (6,567 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:34.064Z","embedding":null,"createdAt":"2026-04-18T21:33:08.871Z","updatedAt":"2026-04-24T18:50:34.064Z","lastSeenAt":"2026-04-24T18:50:34.064Z","tsv":"'-123':260,272 '0':408 '1':109,254,366,511 '10':136,237,277,331,428 '123':217 '12345':95 '2':113,521 '3':530 '4':538 '5':547 '50':290 '5000':138 '6':559 '60000':196,365 '7':568 '99.99':97 'across':528 'action':617 'alway':533,564 'amount':96 'applic':611 'application/json':99 'applicationproperti':218 'arg':182 'args.error':185 'ask':655 'async':169,181,191 'auth':515 'authent':55 'auto':176 'auto-complet':175 'avoid':516 'await':91,104,114,117,134,147,150,192,194,210,235,250,266,275,283,285,291,303,329,344,372,381,391,402,405,426,470,476,482,488 'azur':2,12 'azure-servicebus-t':1 'azure/identity':30,64 'azure/service-bus':29,60,450 'bash':26,33 'batch':100,103,116,131,569 'batch.tryaddmessage':106,110 'best':509 'bodi':93,107,111,212,252,374 'boundari':663 'buffer.from':287 'bus':14 'callback':543 'cancel':378 'clarif':657 'clear':630 'client':70,523 'client.acceptsession':267 'client.createreceiver':126,161,226,321,417,464,503 'client.createsender':85,206,246,352 'close':531,534 'code':598 'complet':177 'completed/abandoned':461 'configur':560 'connect':517 'console.error':183 'console.log':144,171,337,434 'const':65,69,83,102,124,132,140,159,165,204,224,233,244,264,273,281,319,327,333,350,360,370,400,415,424,430,462,501 'contenttyp':98 'core':76 'creat':524 'createmessagebatch':572 'criteria':666 'data':215,255 'date':363 'date.now':364 'dead':294,301,316,562 'dead-lett':293,300,315,561 'deadlett':326 'deadlettererrordescript':309 'deadletterreason':306 'default':457 'defaultazurecredenti':62,75 'defer':387,395,485 'deferr':385 'deferredmessag':401,407 'delay':375 'delet':497 'deliveri':359 'describ':618,634 'destruct':413 'detail':579 'dlq':338,493,566,599 'dlqmessag':328,336 'dlqreceiv':320 'dlqreceiver.completemessage':345 'dlqreceiver.receivemessages':330 'document':577 'done':537 'driven':157 'enterpris':5,18 'entra':513 'environ':31,646 'environment-specif':645 'error':184,540,593 'event':156,213 'event-driven':155 'eventtyp':219 'execut':613 'expert':651 'fail':308 'field':312 'first':256 'fullyqualifiednamespac':66,73 'futur':358 'get/set':278 'grace':603 'group':558 'handl':296,539,565,594,600 'id':514 'immedi':500 'implement':541 'import':57,61,440 'input':660 'instal':25,28 'json.stringify':288 'key':437 'later':390,487 'letter':295,302,317,563 'limit':622 'lock':456,459,601 'log':343 'match':631 'matter':555 'maxwaittimeinm':137 'messag':6,19,79,90,101,108,112,120,133,141,143,149,154,170,174,234,238,243,263,274,305,348,376,380,384,388,393,396,410,458,472,478,484,490,498,553,567,575,591 'message.body':146,173 'message.sequencenumber':404 'minut':367 'miss':310,668 'mode':452,590 'move':298,491 'msg':334,346,431 'msg.body':436 'msg.deadletterreason':340 'multipl':574 'my-queu':40,86,127,162,322,353,418,465,504 'my-subscript':52,230 'my-top':46,207,227 'name':39,45,51 'namespac':35,68 'new':71,74,362 'non':412 'non-destruct':411 'npm':27 'number':399 'order':551,554 'order.created':214,220 'orderid':94,216,313 'output':640 'overview':621 'pattern':580,585,587 'peek':409,421,435,455 'peek-lock':454 'peekedmessag':425,433 'peeklock':469 'permiss':661 'practic':510 'process':172,314 'process.env.servicebus':67 'processerror':180,542 'processerrorcallback':448 'processmessag':168 'processmessagecallback':447 'product':520 'progress':289 'queue':8,21,38,42,81,88,122,129,164,249,270,318,324,355,420,467,475,481,506,582 'queue/topic':586 'reason':339 'receiv':119,125,130,145,160,221,261,394,416,451,463,495,502,546,589 'receive-and-delet':494 'receiveanddelet':508 'receivemod':468,507 'receiver.abandonmessage':477 'receiver.close':151,195 'receiver.completemessage':148,406,471 'receiver.deadlettermessage':304,489 'receiver.defermessage':392,483 'receiver.peekmessages':427 'receiver.receivedeferredmessages':403 'receiver.receivemessages':135 'receiver.subscribe':167 'refer':576 'reliabl':596 'remov':423,473,499 'renew':602 'reprocess':341 'requir':311,659 'resourc':532 'return':479 'reus':522 'review':652 'safeti':662 'schedul':347,356,379 'scheduledtim':361,377 'scope':633 'sdk':15 'see':581 'send':78,201,241,570 'sender':84,245,351 'sender.cancelscheduledmessages':382 'sender.close':118 'sender.createmessagebatch':105 'sender.schedulemessages':373 'sender.sendmessages':92,115,251 'senders/receivers':529,535 'sequenc':398 'sequencenumb':371,383 'servic':13 'servicebus':3,34,37,43,49 'servicebus.windows.net':36 'servicebuscli':58,72,441,525 'servicebuserror':597 'servicebusmessag':445 'servicebusreceiv':443 'servicebusreceivedmessag':446 'servicebussend':442 'servicebussessionreceiv':444 'session':239,242,248,262,269,279,549,588 'session-queu':247,268 'sessionid':258 'sessionreceiv':265 'sessionreceiver.close':292 'sessionreceiver.getsessionstate':284 'sessionreceiver.receivemessages':276 'sessionreceiver.setsessionstate':286 'settimeout':190 'settlement':592 'share':527 'shutdown':604 'singl':89 'skill':609,625 'skill-azure-servicebus-ts' 'source-sickn33' 'specif':647 'state':280,282 'step':253,257 'stop':186,653 'string':518 'subqueuetyp':325 'subscrib':152 'subscript':11,24,50,54,166,199,223,232,545 'subscription.close':193 'subscriptionreceiv':225 'subscriptionreceiver.receivemessages':236 'substitut':643 'success':179,665 'task':629 'test':649 'time':189 'topic':9,22,44,48,197,203,209,229,584 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'topicsend':205 'topicsender.sendmessages':211 'treat':638 'ts':4 'type':438 'typescript':17,56,82,123,158,200,240,297,349,386,414,439,453 'use':512,548,571,607,623 'valid':307,648 'variabl':32 'vs':583 'within':556 'without':422 'workflow':77,259,271,615","prices":[{"id":"b184337f-8fd1-4bcc-bd99-b327fff060a6","listingId":"e3d5c3da-c199-4e4a-8c8f-6cb4786ffa93","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:33:08.871Z"}],"sources":[{"listingId":"e3d5c3da-c199-4e4a-8c8f-6cb4786ffa93","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-servicebus-ts","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-servicebus-ts","isPrimary":false,"firstSeenAt":"2026-04-18T21:33:08.871Z","lastSeenAt":"2026-04-24T18:50:34.064Z"}],"details":{"listingId":"e3d5c3da-c199-4e4a-8c8f-6cb4786ffa93","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-servicebus-ts","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"738bc3e7f719b92b854954c9eabaf67ebdd36746","skill_md_path":"skills/azure-servicebus-ts/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-servicebus-ts"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-servicebus-ts","description":"Enterprise messaging with queues, topics, and subscriptions."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-servicebus-ts"},"updatedAt":"2026-04-24T18:50:34.064Z"}}