{"id":"b0ebd5c6-4a1b-4b50-9636-e52caa67e99a","shortId":"KQvuBH","kind":"skill","title":"azure-servicebus-py","tagline":"Azure Service Bus SDK for Python messaging. Use for queues, topics, subscriptions, and enterprise messaging patterns.","description":"# Azure Service Bus SDK for Python\n\nEnterprise messaging for reliable cloud communication with queues and pub/sub topics.\n\n## Installation\n\n```bash\npip install azure-servicebus azure-identity\n```\n\n## Environment Variables\n\n```bash\nSERVICEBUS_FULLY_QUALIFIED_NAMESPACE=<namespace>.servicebus.windows.net\nSERVICEBUS_QUEUE_NAME=myqueue\nSERVICEBUS_TOPIC_NAME=mytopic\nSERVICEBUS_SUBSCRIPTION_NAME=mysubscription\n```\n\n## Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.servicebus import ServiceBusClient\n\ncredential = DefaultAzureCredential()\nnamespace = \"<namespace>.servicebus.windows.net\"\n\nclient = ServiceBusClient(\n    fully_qualified_namespace=namespace,\n    credential=credential\n)\n```\n\n## Client Types\n\n| Client | Purpose | Get From |\n|--------|---------|----------|\n| `ServiceBusClient` | Connection management | Direct instantiation |\n| `ServiceBusSender` | Send messages | `client.get_queue_sender()` / `get_topic_sender()` |\n| `ServiceBusReceiver` | Receive messages | `client.get_queue_receiver()` / `get_subscription_receiver()` |\n\n## Send Messages (Async)\n\n```python\nimport asyncio\nfrom azure.servicebus.aio import ServiceBusClient\nfrom azure.servicebus import ServiceBusMessage\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def send_messages():\n    credential = DefaultAzureCredential()\n    \n    async with ServiceBusClient(\n        fully_qualified_namespace=\"<namespace>.servicebus.windows.net\",\n        credential=credential\n    ) as client:\n        sender = client.get_queue_sender(queue_name=\"myqueue\")\n        \n        async with sender:\n            # Single message\n            message = ServiceBusMessage(\"Hello, Service Bus!\")\n            await sender.send_messages(message)\n            \n            # Batch of messages\n            messages = [ServiceBusMessage(f\"Message {i}\") for i in range(10)]\n            await sender.send_messages(messages)\n            \n            # Message batch (for size control)\n            batch = await sender.create_message_batch()\n            for i in range(100):\n                try:\n                    batch.add_message(ServiceBusMessage(f\"Batch message {i}\"))\n                except ValueError:  # Batch full\n                    await sender.send_messages(batch)\n                    batch = await sender.create_message_batch()\n                    batch.add_message(ServiceBusMessage(f\"Batch message {i}\"))\n            await sender.send_messages(batch)\n\nasyncio.run(send_messages())\n```\n\n## Receive Messages (Async)\n\n```python\nasync def receive_messages():\n    credential = DefaultAzureCredential()\n    \n    async with ServiceBusClient(\n        fully_qualified_namespace=\"<namespace>.servicebus.windows.net\",\n        credential=credential\n    ) as client:\n        receiver = client.get_queue_receiver(queue_name=\"myqueue\")\n        \n        async with receiver:\n            # Receive batch\n            messages = await receiver.receive_messages(\n                max_message_count=10,\n                max_wait_time=5  # seconds\n            )\n            \n            for msg in messages:\n                print(f\"Received: {str(msg)}\")\n                await receiver.complete_message(msg)  # Remove from queue\n\nasyncio.run(receive_messages())\n```\n\n## Receive Modes\n\n| Mode | Behavior | Use Case |\n|------|----------|----------|\n| `PEEK_LOCK` (default) | Message locked, must complete/abandon | Reliable processing |\n| `RECEIVE_AND_DELETE` | Removed immediately on receive | At-most-once delivery |\n\n```python\nfrom azure.servicebus import ServiceBusReceiveMode\n\nreceiver = client.get_queue_receiver(\n    queue_name=\"myqueue\",\n    receive_mode=ServiceBusReceiveMode.RECEIVE_AND_DELETE\n)\n```\n\n## Message Settlement\n\n```python\nasync with receiver:\n    messages = await receiver.receive_messages(max_message_count=1)\n    \n    for msg in messages:\n        try:\n            # Process message...\n            await receiver.complete_message(msg)  # Success - remove from queue\n        except ProcessingError:\n            await receiver.abandon_message(msg)  # Retry later\n        except PermanentError:\n            await receiver.dead_letter_message(\n                msg,\n                reason=\"ProcessingFailed\",\n                error_description=\"Could not process\"\n            )\n```\n\n| Action | Effect |\n|--------|--------|\n| `complete_message()` | Remove from queue (success) |\n| `abandon_message()` | Release lock, retry immediately |\n| `dead_letter_message()` | Move to dead-letter queue |\n| `defer_message()` | Set aside, receive by sequence number |\n\n## Topics and Subscriptions\n\n```python\n# Send to topic\nsender = client.get_topic_sender(topic_name=\"mytopic\")\nasync with sender:\n    await sender.send_messages(ServiceBusMessage(\"Topic message\"))\n\n# Receive from subscription\nreceiver = client.get_subscription_receiver(\n    topic_name=\"mytopic\",\n    subscription_name=\"mysubscription\"\n)\nasync with receiver:\n    messages = await receiver.receive_messages(max_message_count=10)\n```\n\n## Sessions (FIFO)\n\n```python\n# Send with session\nmessage = ServiceBusMessage(\"Session message\")\nmessage.session_id = \"order-123\"\nawait sender.send_messages(message)\n\n# Receive from specific session\nreceiver = client.get_queue_receiver(\n    queue_name=\"session-queue\",\n    session_id=\"order-123\"\n)\n\n# Receive from next available session\nfrom azure.servicebus import NEXT_AVAILABLE_SESSION\nreceiver = client.get_queue_receiver(\n    queue_name=\"session-queue\",\n    session_id=NEXT_AVAILABLE_SESSION\n)\n```\n\n## Scheduled Messages\n\n```python\nfrom datetime import datetime, timedelta, timezone\n\nmessage = ServiceBusMessage(\"Scheduled message\")\nscheduled_time = datetime.now(timezone.utc) + timedelta(minutes=10)\n\n# Schedule message\nsequence_number = await sender.schedule_messages(message, scheduled_time)\n\n# Cancel scheduled message\nawait sender.cancel_scheduled_messages(sequence_number)\n```\n\n## Dead-Letter Queue\n\n```python\nfrom azure.servicebus import ServiceBusSubQueue\n\n# Receive from dead-letter queue\ndlq_receiver = client.get_queue_receiver(\n    queue_name=\"myqueue\",\n    sub_queue=ServiceBusSubQueue.DEAD_LETTER\n)\n\nasync with dlq_receiver:\n    messages = await dlq_receiver.receive_messages(max_message_count=10)\n    for msg in messages:\n        print(f\"Dead-lettered: {msg.dead_letter_reason}\")\n        await dlq_receiver.complete_message(msg)\n```\n\n## Sync Client (for simple scripts)\n\n```python\nfrom azure.servicebus import ServiceBusClient, ServiceBusMessage\nfrom azure.identity import DefaultAzureCredential\n\nwith ServiceBusClient(\n    fully_qualified_namespace=\"<namespace>.servicebus.windows.net\",\n    credential=DefaultAzureCredential()\n) as client:\n    with client.get_queue_sender(\"myqueue\") as sender:\n        sender.send_messages(ServiceBusMessage(\"Sync message\"))\n    \n    with client.get_queue_receiver(\"myqueue\") as receiver:\n        for msg in receiver:\n            print(str(msg))\n            receiver.complete_message(msg)\n```\n\n## Best Practices\n\n1. **Use async client** for production workloads\n2. **Use context managers** (`async with`) for proper cleanup\n3. **Complete messages** after successful processing\n4. **Use dead-letter queue** for poison messages\n5. **Use sessions** for ordered, FIFO processing\n6. **Use message batches** for high-throughput scenarios\n7. **Set `max_wait_time`** to avoid infinite blocking\n\n## Reference Files\n\n| File | Contents |\n|------|----------|\n| references/patterns.md | Competing consumers, sessions, retry patterns, request-response, transactions |\n| references/dead-letter.md | DLQ handling, poison messages, reprocessing strategies |\n| scripts/setup_servicebus.py | CLI for queue/topic/subscription management and DLQ monitoring |\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-py","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-py","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 (8,101 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.010Z","embedding":null,"createdAt":"2026-04-18T21:33:08.116Z","updatedAt":"2026-04-24T18:50:34.010Z","lastSeenAt":"2026-04-24T18:50:34.010Z","tsv":"'-123':493,514 '1':364,690 '10':187,282,479,559,617 '100':206 '2':697 '3':706 '4':712 '5':286,721 '6':728 '7':737 'abandon':410 'action':402,787 'applic':781 'asid':428 'ask':825 'async':121,137,143,161,244,246,252,270,354,447,469,606,692,701 'asyncio':124 'asyncio.run':239,304 'at-most-onc':329 'authent':68 'avail':518,524,538 'avoid':743 'await':171,188,198,219,224,235,276,297,358,372,382,390,450,473,494,564,573,611,630 'azur':2,5,21,43,46 'azure-ident':45 'azure-servicebus':42 'azure-servicebus-pi':1 'azure.identity':71,646 'azure.identity.aio':134 'azure.servicebus':75,130,336,521,585,641 'azure.servicebus.aio':126 'bash':39,50 'batch':175,193,197,201,212,217,222,223,227,232,238,274,731 'batch.add':208,228 'behavior':310 'best':688 'block':745 'boundari':833 'bus':7,23,170 'cancel':570 'case':312 'clarif':827 'cleanup':705 'clear':800 'cli':768 'client':82,90,92,153,262,635,658,693 'client.get':104,113,155,264,340,441,460,503,527,596,660,672 'cloud':31 'communic':32 'compet':751 'complet':404,707 'complete/abandon':319 'connect':97 'consum':752 'content':749 'context':699 'control':196 'could':399 'count':281,363,478,616 'credenti':78,88,89,141,150,151,250,259,260,655 'criteria':836 'datetim':544,546 'datetime.now':555 'dead':416,422,580,591,625,715 'dead-lett':421,579,590,624,714 'def':138,247 'default':315 'defaultazurecredenti':73,79,136,142,251,648,656 'defer':425 'delet':324,350 'deliveri':333 'describ':788,804 'descript':398 'direct':99 'dlq':594,608,761,773 'dlq_receiver.complete':631 'dlq_receiver.receive':612 'effect':403 'enterpris':18,27 'environ':48,816 'environment-specif':815 'error':397 'except':215,380,388 'execut':783 'expert':821 'f':180,211,231,293,623 'fifo':481,726 'file':747,748 'full':218 'fulli':52,84,146,255,651 'get':94,107,116 'handl':762 'hello':168 'high':734 'high-throughput':733 'id':491,512,536 'ident':47 'immedi':326,415 'import':72,76,123,127,131,135,337,522,545,586,642,647 'infinit':744 'input':830 'instal':38,41 'instanti':100 'later':387 'letter':392,417,423,581,592,605,626,628,716 'limit':792 'lock':314,317,413 'manag':98,700,771 'match':801 'max':279,283,361,476,614,739 'messag':11,19,28,103,112,120,140,165,166,173,174,177,178,181,190,191,192,200,209,213,221,226,229,233,237,241,243,249,275,278,280,291,299,306,316,351,357,360,362,368,371,374,384,393,405,411,418,426,452,455,472,475,477,486,489,496,497,541,549,552,561,566,567,572,576,610,613,615,621,632,667,670,686,708,720,730,764 'message.session':490 'minut':558 'miss':838 'mode':308,309,347 'monitor':774 'move':419 'msg':289,296,300,366,375,385,394,619,633,679,684,687 'msg.dead':627 'must':318 'myqueu':59,160,269,345,601,663,675 'mysubscript':67,468 'mytop':63,446,465 'name':58,62,66,159,268,344,445,464,467,507,531,600 'namespac':54,80,86,87,148,257,653 'next':517,523,537 'number':432,563,578 'order':492,513,725 'output':810 'overview':791 'pattern':20,755 'peek':313 'permanenterror':389 'permiss':831 'pip':40 'poison':719,763 'practic':689 'print':292,622,682 'process':321,370,401,711,727 'processingerror':381 'processingfail':396 'product':695 'proper':704 'pub/sub':36 'purpos':93 'py':4 'python':10,26,69,122,245,334,353,436,482,542,583,639 'qualifi':53,85,147,256,652 'queue':14,34,57,105,114,156,158,265,267,303,341,343,379,408,424,504,506,510,528,530,534,582,593,597,599,603,661,673,717 'queue/topic/subscription':770 'rang':186,205 'reason':395,629 'receiv':111,115,118,242,248,263,266,272,273,294,305,307,322,328,339,342,346,356,429,456,459,462,471,498,502,505,515,526,529,588,595,598,609,674,677,681 'receiver.abandon':383 'receiver.complete':298,373,685 'receiver.dead':391 'receiver.receive':277,359,474 'refer':746 'references/dead-letter.md':760 'references/patterns.md':750 'releas':412 'reliabl':30,320 'remov':301,325,377,406 'reprocess':765 'request':757 'request-respons':756 'requir':829 'respons':758 'retri':386,414,754 'review':822 'safeti':832 'scenario':736 'schedul':540,551,553,560,568,571,575 'scope':803 'script':638 'scripts/setup_servicebus.py':767 'sdk':8,24 'second':287 'send':102,119,139,240,437,483 'sender':106,109,154,157,163,440,443,449,662,665 'sender.cancel':574 'sender.create':199,225 'sender.schedule':565 'sender.send':172,189,220,236,451,495,666 'sequenc':431,562,577 'servic':6,22,169 'servicebus':3,44,51,56,60,64 'servicebus.windows.net':55,81,149,258,654 'servicebuscli':77,83,96,128,145,254,643,650 'servicebusmessag':132,167,179,210,230,453,487,550,644,668 'servicebusreceiv':110 'servicebusreceivemod':338 'servicebusreceivemode.receive':348 'servicebussend':101 'servicebussubqueu':587 'servicebussubqueue.dead':604 'session':480,485,488,501,509,511,519,525,533,535,539,723,753 'session-queu':508,532 'set':427,738 'settlement':352 'simpl':637 'singl':164 'size':195 'skill':779,795 'skill-azure-servicebus-py' 'source-sickn33' 'specif':500,817 'stop':823 'str':295,683 'strategi':766 'sub':602 'subscript':16,65,117,435,458,461,466 'substitut':813 'success':376,409,710,835 'sync':634,669 'task':799 'test':819 'throughput':735 'time':285,554,569,741 'timedelta':547,557 'timezon':548 'timezone.utc':556 'topic':15,37,61,108,433,439,442,444,454,463 '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' 'transact':759 'treat':808 'tri':207,369 'type':91 'use':12,311,691,698,713,722,729,777,793 'valid':818 'valueerror':216 'variabl':49 'wait':284,740 'workflow':785 'workload':696","prices":[{"id":"d93ecabc-0064-4353-83a0-fd1c384a843c","listingId":"b0ebd5c6-4a1b-4b50-9636-e52caa67e99a","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.116Z"}],"sources":[{"listingId":"b0ebd5c6-4a1b-4b50-9636-e52caa67e99a","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-servicebus-py","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-servicebus-py","isPrimary":false,"firstSeenAt":"2026-04-18T21:33:08.116Z","lastSeenAt":"2026-04-24T18:50:34.010Z"}],"details":{"listingId":"b0ebd5c6-4a1b-4b50-9636-e52caa67e99a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-servicebus-py","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":"165f82b567985b8c65819509d82e2fee53804257","skill_md_path":"skills/azure-servicebus-py/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-servicebus-py"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-servicebus-py","description":"Azure Service Bus SDK for Python messaging. Use for queues, topics, subscriptions, and enterprise messaging patterns."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-servicebus-py"},"updatedAt":"2026-04-24T18:50:34.010Z"}}