[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-azure-servicebus-dotnet":3,"mdc--g9bflh-key":42,"related-repo-microsoft-azure-servicebus-dotnet":2471,"related-org-microsoft-azure-servicebus-dotnet":2580},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":37,"sourceUrl":40,"mdContent":41},"azure-servicebus-dotnet","implement enterprise messaging with Service Bus","Azure Service Bus SDK for .NET. Enterprise messaging with queues, topics, subscriptions, and sessions. Use for reliable message delivery, pub\u002Fsub patterns, dead letter handling, and background processing. Triggers: \"Service Bus\", \"ServiceBusClient\", \"ServiceBusSender\", \"ServiceBusReceiver\", \"ServiceBusProcessor\", \"message queue\", \"pub\u002Fsub .NET\", \"dead letter queue\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Azure","azure","tag",{"name":17,"slug":18,"type":15},"Service Bus","service-bus",{"name":20,"slug":21,"type":15},".NET","net",{"name":23,"slug":24,"type":15},"Messaging","messaging",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-05-13T06:14:24.114381","MIT",315,[31,32,14,33,34,35,36],"agent-skills","agents","foundry","mcp","sdk","skills",{"repoUrl":26,"stars":25,"forks":29,"topics":38,"description":39},[31,32,14,33,34,35,36],"Skills, MCP servers, Custom Agents, Agents.md for SDKs to ground Coding Agents","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Ftree\u002FHEAD\u002F.github\u002Fplugins\u002Fazure-sdk-dotnet\u002Fskills\u002Fazure-servicebus-dotnet","---\nname: azure-servicebus-dotnet\ndescription: |\n  Azure Service Bus SDK for .NET. Enterprise messaging with queues, topics, subscriptions, and sessions. Use for reliable message delivery, pub\u002Fsub patterns, dead letter handling, and background processing. Triggers: \"Service Bus\", \"ServiceBusClient\", \"ServiceBusSender\", \"ServiceBusReceiver\", \"ServiceBusProcessor\", \"message queue\", \"pub\u002Fsub .NET\", \"dead letter queue\".\nlicense: MIT\nmetadata:\n  author: Microsoft\n  version: \"1.0.0\"\n  package: Azure.Messaging.ServiceBus\n---\n\n# Azure.Messaging.ServiceBus (.NET)\n\nEnterprise messaging SDK for reliable message delivery with queues, topics, subscriptions, and sessions.\n\n## Installation\n\n```bash\ndotnet add package Azure.Messaging.ServiceBus\ndotnet add package Azure.Identity\n```\n\n**Current Version**: v7.20.1 (stable)\n\n## Environment Variables\n\n```bash\nAZURE_SERVICEBUS_FULLY_QUALIFIED_NAMESPACE=\u003Cnamespace>.servicebus.windows.net  # Required: Service Bus fully qualified namespace\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\nAZURE_SERVICEBUS_CONNECTION_STRING=Endpoint=sb:\u002F\u002F...  # Alternative to Entra ID auth\n```\n\n## Authentication\n\n### Microsoft Entra Token Credential\n\n```csharp\nusing Azure.Identity;\nusing Azure.Messaging.ServiceBus;\n\nstring fullyQualifiedNamespace = \"\u003Cnamespace>.servicebus.windows.net\";\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nvar credential = new DefaultAzureCredential(\n    DefaultAzureCredential.DefaultEnvironmentVariableName\n);\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-dotnet#credential-classes\n\u002F\u002F var credential = new ManagedIdentityCredential();\nawait using ServiceBusClient client = new(fullyQualifiedNamespace, credential);\n```\n\n### Connection String\n\n```csharp\nstring connectionString = \"\u003Cconnection_string>\";\nawait using ServiceBusClient client = new(connectionString);\n```\n\n### ASP.NET Core Dependency Injection\n\n```csharp\nservices.AddAzureClients(builder =>\n{\n    builder.AddServiceBusClientWithNamespace(\"\u003Cnamespace>.servicebus.windows.net\");\n    builder.UseCredential(new DefaultAzureCredential());\n});\n```\n\n## Client Hierarchy\n\n```\nServiceBusClient\n├── CreateSender(queueOrTopicName)      → ServiceBusSender\n├── CreateReceiver(queueName)           → ServiceBusReceiver\n├── CreateReceiver(topicName, subName)  → ServiceBusReceiver\n├── AcceptNextSessionAsync(queueName)   → ServiceBusSessionReceiver\n├── CreateProcessor(queueName)          → ServiceBusProcessor\n└── CreateSessionProcessor(queueName)   → ServiceBusSessionProcessor\n\nServiceBusAdministrationClient (separate client for CRUD)\n```\n\n## Core Workflows\n\n### 1. Send Messages\n\n```csharp\nawait using ServiceBusClient client = new(fullyQualifiedNamespace, new DefaultAzureCredential());\nServiceBusSender sender = client.CreateSender(\"my-queue\");\n\n\u002F\u002F Single message\nServiceBusMessage message = new(\"Hello world!\");\nawait sender.SendMessageAsync(message);\n\n\u002F\u002F Safe batching (recommended)\nusing ServiceBusMessageBatch batch = await sender.CreateMessageBatchAsync();\nif (batch.TryAddMessage(new ServiceBusMessage(\"Message 1\")))\n{\n    \u002F\u002F Message added successfully\n}\nif (batch.TryAddMessage(new ServiceBusMessage(\"Message 2\")))\n{\n    \u002F\u002F Message added successfully\n}\nawait sender.SendMessagesAsync(batch);\n```\n\n### 2. Receive Messages\n\n```csharp\nServiceBusReceiver receiver = client.CreateReceiver(\"my-queue\");\n\n\u002F\u002F Single message\nServiceBusReceivedMessage message = await receiver.ReceiveMessageAsync();\nstring body = message.Body.ToString();\nConsole.WriteLine(body);\n\n\u002F\u002F Complete the message (removes from queue)\nawait receiver.CompleteMessageAsync(message);\n\n\u002F\u002F Batch receive\nIReadOnlyList\u003CServiceBusReceivedMessage> messages = await receiver.ReceiveMessagesAsync(maxMessages: 10);\nforeach (var msg in messages)\n{\n    Console.WriteLine(msg.Body.ToString());\n    await receiver.CompleteMessageAsync(msg);\n}\n```\n\n### 3. Message Settlement\n\n```csharp\n\u002F\u002F Complete - removes message from queue\nawait receiver.CompleteMessageAsync(message);\n\n\u002F\u002F Abandon - releases lock, message can be received again\nawait receiver.AbandonMessageAsync(message);\n\n\u002F\u002F Defer - prevents normal receive, use ReceiveDeferredMessageAsync\nawait receiver.DeferMessageAsync(message);\n\n\u002F\u002F Dead Letter - moves to dead letter subqueue\nawait receiver.DeadLetterMessageAsync(message, \"InvalidFormat\", \"Message body was not valid JSON\");\n```\n\n### 4. Background Processing with Processor\n\n```csharp\nServiceBusProcessor processor = client.CreateProcessor(\"my-queue\", new ServiceBusProcessorOptions\n{\n    AutoCompleteMessages = false,\n    MaxConcurrentCalls = 2\n});\n\nprocessor.ProcessMessageAsync += async (args) =>\n{\n    try\n    {\n        string body = args.Message.Body.ToString();\n        Console.WriteLine($\"Received: {body}\");\n        await args.CompleteMessageAsync(args.Message);\n    }\n    catch (Exception ex)\n    {\n        Console.WriteLine($\"Error processing: {ex.Message}\");\n        await args.AbandonMessageAsync(args.Message);\n    }\n};\n\nprocessor.ProcessErrorAsync += (args) =>\n{\n    Console.WriteLine($\"Error source: {args.ErrorSource}\");\n    Console.WriteLine($\"Entity: {args.EntityPath}\");\n    Console.WriteLine($\"Exception: {args.Exception}\");\n    return Task.CompletedTask;\n};\n\nawait processor.StartProcessingAsync();\n\u002F\u002F ... application runs\nawait processor.StopProcessingAsync();\n```\n\n### 5. Sessions (Ordered Processing)\n\n```csharp\n\u002F\u002F Send session message\nServiceBusMessage message = new(\"Hello\")\n{\n    SessionId = \"order-123\"\n};\nawait sender.SendMessageAsync(message);\n\n\u002F\u002F Receive from next available session\nServiceBusSessionReceiver receiver = await client.AcceptNextSessionAsync(\"my-queue\");\n\n\u002F\u002F Or receive from specific session\nServiceBusSessionReceiver receiver = await client.AcceptSessionAsync(\"my-queue\", \"order-123\");\n\n\u002F\u002F Session state management\nawait receiver.SetSessionStateAsync(new BinaryData(\"processing\"));\nBinaryData state = await receiver.GetSessionStateAsync();\n\n\u002F\u002F Renew session lock\nawait receiver.RenewSessionLockAsync();\n```\n\n### 6. Dead Letter Queue\n\n```csharp\n\u002F\u002F Receive from dead letter queue\nServiceBusReceiver dlqReceiver = client.CreateReceiver(\"my-queue\", new ServiceBusReceiverOptions\n{\n    SubQueue = SubQueue.DeadLetter\n});\n\nServiceBusReceivedMessage dlqMessage = await dlqReceiver.ReceiveMessageAsync();\n\n\u002F\u002F Access dead letter metadata\nstring reason = dlqMessage.DeadLetterReason;\nstring description = dlqMessage.DeadLetterErrorDescription;\nConsole.WriteLine($\"Dead letter reason: {reason} - {description}\");\n```\n\n### 7. Topics and Subscriptions\n\n```csharp\n\u002F\u002F Send to topic\nServiceBusSender topicSender = client.CreateSender(\"my-topic\");\nawait topicSender.SendMessageAsync(new ServiceBusMessage(\"Broadcast message\"));\n\n\u002F\u002F Receive from subscription\nServiceBusReceiver subReceiver = client.CreateReceiver(\"my-topic\", \"my-subscription\");\nvar message = await subReceiver.ReceiveMessageAsync();\n```\n\n### 8. Administration (CRUD)\n\n```csharp\nvar adminClient = new ServiceBusAdministrationClient(\n    fullyQualifiedNamespace, \n    new DefaultAzureCredential());\n\n\u002F\u002F Create queue\nvar options = new CreateQueueOptions(\"my-queue\")\n{\n    MaxDeliveryCount = 10,\n    LockDuration = TimeSpan.FromSeconds(30),\n    RequiresSession = true,\n    DeadLetteringOnMessageExpiration = true\n};\nQueueProperties queue = await adminClient.CreateQueueAsync(options);\n\n\u002F\u002F Update queue\nqueue.LockDuration = TimeSpan.FromSeconds(60);\nawait adminClient.UpdateQueueAsync(queue);\n\n\u002F\u002F Create topic and subscription\nawait adminClient.CreateTopicAsync(new CreateTopicOptions(\"my-topic\"));\nawait adminClient.CreateSubscriptionAsync(new CreateSubscriptionOptions(\"my-topic\", \"my-subscription\"));\n\n\u002F\u002F Delete\nawait adminClient.DeleteQueueAsync(\"my-queue\");\n```\n\n### 9. Cross-Entity Transactions\n\n```csharp\nvar options = new ServiceBusClientOptions { EnableCrossEntityTransactions = true };\nawait using var client = new ServiceBusClient(connectionString, options);\n\nServiceBusReceiver receiverA = client.CreateReceiver(\"queueA\");\nServiceBusSender senderB = client.CreateSender(\"queueB\");\n\nServiceBusReceivedMessage receivedMessage = await receiverA.ReceiveMessageAsync();\n\nusing (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))\n{\n    await receiverA.CompleteMessageAsync(receivedMessage);\n    await senderB.SendMessageAsync(new ServiceBusMessage(\"Forwarded\"));\n    ts.Complete();\n}\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `ServiceBusClient` | Main entry point, manages connection |\n| `ServiceBusSender` | Sends messages to queues\u002Ftopics |\n| `ServiceBusReceiver` | Receives messages from queues\u002Fsubscriptions |\n| `ServiceBusSessionReceiver` | Receives session messages |\n| `ServiceBusProcessor` | Background message processing |\n| `ServiceBusSessionProcessor` | Background session processing |\n| `ServiceBusAdministrationClient` | CRUD for queues\u002Ftopics\u002Fsubscriptions |\n| `ServiceBusMessage` | Message to send |\n| `ServiceBusReceivedMessage` | Received message with metadata |\n| `ServiceBusMessageBatch` | Batch of messages |\n\n## Best Practices\n\n1. **Use singletons** — Clients, senders, receivers, and processors are thread-safe\n2. **Always dispose** — Use `await using` or call `DisposeAsync()`\n3. **Dispose order** — Close senders\u002Freceivers\u002Fprocessors first, then client\n4. **Use DefaultAzureCredential** — Prefer over connection strings for production\n5. **Use processors for background work** — Handles lock renewal automatically\n6. **Use safe batching** — `CreateMessageBatchAsync()` and `TryAddMessage()`\n7. **Handle transient errors** — Use `ServiceBusException.Reason`\n8. **Configure transport** — Use `AmqpWebSockets` if ports 5671\u002F5672 are blocked\n9. **Set appropriate lock duration** — Default is 30 seconds\n10. **Use sessions for ordering** — FIFO within a session\n\n## Error Handling\n\n```csharp\ntry\n{\n    await sender.SendMessageAsync(message);\n}\ncatch (ServiceBusException ex) when (ex.Reason == ServiceBusFailureReason.ServiceBusy)\n{\n    \u002F\u002F Retry with backoff\n}\ncatch (ServiceBusException ex)\n{\n    Console.WriteLine($\"Service Bus Error: {ex.Reason} - {ex.Message}\");\n}\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.Messaging.ServiceBus` | Service Bus (this SDK) | `dotnet add package Azure.Messaging.ServiceBus` |\n| `Azure.Messaging.EventHubs` | Event streaming | `dotnet add package Azure.Messaging.EventHubs` |\n| `Azure.Messaging.EventGrid` | Event routing | `dotnet add package Azure.Messaging.EventGrid` |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.Messaging.ServiceBus |\n| API Reference | https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fazure.messaging.servicebus |\n| GitHub Source | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fservicebus\u002FAzure.Messaging.ServiceBus |\n| Troubleshooting | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fservicebus\u002FAzure.Messaging.ServiceBus\u002FTROUBLESHOOTING.md |\n",{"data":43,"body":47},{"name":4,"description":6,"license":28,"metadata":44},{"author":9,"version":45,"package":46},"1.0.0","Azure.Messaging.ServiceBus",{"type":48,"children":49},"root",[50,59,65,72,133,144,150,248,254,261,376,382,405,411,458,464,474,480,486,637,643,780,786,877,883,1150,1156,1308,1314,1413,1419,1481,1487,1680,1686,1800,1806,2004,2010,2155,2161,2258,2264,2367,2373,2465],{"type":51,"tag":52,"props":53,"children":55},"element","h1",{"id":54},"azuremessagingservicebus-net",[56],{"type":57,"value":58},"text","Azure.Messaging.ServiceBus (.NET)",{"type":51,"tag":60,"props":61,"children":62},"p",{},[63],{"type":57,"value":64},"Enterprise messaging SDK for reliable message delivery with queues, topics, subscriptions, and sessions.",{"type":51,"tag":66,"props":67,"children":69},"h2",{"id":68},"installation",[70],{"type":57,"value":71},"Installation",{"type":51,"tag":73,"props":74,"children":79},"pre",{"className":75,"code":76,"language":77,"meta":78,"style":78},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dotnet add package Azure.Messaging.ServiceBus\ndotnet add package Azure.Identity\n","bash","",[80],{"type":51,"tag":81,"props":82,"children":83},"code",{"__ignoreMap":78},[84,112],{"type":51,"tag":85,"props":86,"children":89},"span",{"class":87,"line":88},"line",1,[90,96,102,107],{"type":51,"tag":85,"props":91,"children":93},{"style":92},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[94],{"type":57,"value":95},"dotnet",{"type":51,"tag":85,"props":97,"children":99},{"style":98},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[100],{"type":57,"value":101}," add",{"type":51,"tag":85,"props":103,"children":104},{"style":98},[105],{"type":57,"value":106}," package",{"type":51,"tag":85,"props":108,"children":109},{"style":98},[110],{"type":57,"value":111}," Azure.Messaging.ServiceBus\n",{"type":51,"tag":85,"props":113,"children":115},{"class":87,"line":114},2,[116,120,124,128],{"type":51,"tag":85,"props":117,"children":118},{"style":92},[119],{"type":57,"value":95},{"type":51,"tag":85,"props":121,"children":122},{"style":98},[123],{"type":57,"value":101},{"type":51,"tag":85,"props":125,"children":126},{"style":98},[127],{"type":57,"value":106},{"type":51,"tag":85,"props":129,"children":130},{"style":98},[131],{"type":57,"value":132}," Azure.Identity\n",{"type":51,"tag":60,"props":134,"children":135},{},[136,142],{"type":51,"tag":137,"props":138,"children":139},"strong",{},[140],{"type":57,"value":141},"Current Version",{"type":57,"value":143},": v7.20.1 (stable)",{"type":51,"tag":66,"props":145,"children":147},{"id":146},"environment-variables",[148],{"type":57,"value":149},"Environment Variables",{"type":51,"tag":73,"props":151,"children":153},{"className":75,"code":152,"language":77,"meta":78,"style":78},"AZURE_SERVICEBUS_FULLY_QUALIFIED_NAMESPACE=\u003Cnamespace>.servicebus.windows.net  # Required: Service Bus fully qualified namespace\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\nAZURE_SERVICEBUS_CONNECTION_STRING=Endpoint=sb:\u002F\u002F...  # Alternative to Entra ID auth\n",[154],{"type":51,"tag":81,"props":155,"children":156},{"__ignoreMap":78},[157,193,216],{"type":51,"tag":85,"props":158,"children":159},{"class":87,"line":88},[160,166,172,177,182,187],{"type":51,"tag":85,"props":161,"children":163},{"style":162},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[164],{"type":57,"value":165},"AZURE_SERVICEBUS_FULLY_QUALIFIED_NAMESPACE",{"type":51,"tag":85,"props":167,"children":169},{"style":168},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[170],{"type":57,"value":171},"=\u003C",{"type":51,"tag":85,"props":173,"children":174},{"style":98},[175],{"type":57,"value":176},"namespace",{"type":51,"tag":85,"props":178,"children":179},{"style":168},[180],{"type":57,"value":181},">",{"type":51,"tag":85,"props":183,"children":184},{"style":98},[185],{"type":57,"value":186},".servicebus.windows.net",{"type":51,"tag":85,"props":188,"children":190},{"style":189},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[191],{"type":57,"value":192},"  # Required: Service Bus fully qualified namespace\n",{"type":51,"tag":85,"props":194,"children":195},{"class":87,"line":114},[196,201,206,211],{"type":51,"tag":85,"props":197,"children":198},{"style":162},[199],{"type":57,"value":200},"AZURE_TOKEN_CREDENTIALS",{"type":51,"tag":85,"props":202,"children":203},{"style":168},[204],{"type":57,"value":205},"=",{"type":51,"tag":85,"props":207,"children":208},{"style":98},[209],{"type":57,"value":210},"prod",{"type":51,"tag":85,"props":212,"children":213},{"style":189},[214],{"type":57,"value":215},"  # Required only if DefaultAzureCredential is used in production\n",{"type":51,"tag":85,"props":217,"children":219},{"class":87,"line":218},3,[220,225,229,234,238,243],{"type":51,"tag":85,"props":221,"children":222},{"style":162},[223],{"type":57,"value":224},"AZURE_SERVICEBUS_CONNECTION_STRING",{"type":51,"tag":85,"props":226,"children":227},{"style":168},[228],{"type":57,"value":205},{"type":51,"tag":85,"props":230,"children":231},{"style":162},[232],{"type":57,"value":233},"Endpoint",{"type":51,"tag":85,"props":235,"children":236},{"style":168},[237],{"type":57,"value":205},{"type":51,"tag":85,"props":239,"children":240},{"style":98},[241],{"type":57,"value":242},"sb:\u002F\u002F...",{"type":51,"tag":85,"props":244,"children":245},{"style":189},[246],{"type":57,"value":247},"  # Alternative to Entra ID auth\n",{"type":51,"tag":66,"props":249,"children":251},{"id":250},"authentication",[252],{"type":57,"value":253},"Authentication",{"type":51,"tag":255,"props":256,"children":258},"h3",{"id":257},"microsoft-entra-token-credential",[259],{"type":57,"value":260},"Microsoft Entra Token Credential",{"type":51,"tag":73,"props":262,"children":266},{"className":263,"code":264,"language":265,"meta":78,"style":78},"language-csharp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","using Azure.Identity;\nusing Azure.Messaging.ServiceBus;\n\nstring fullyQualifiedNamespace = \"\u003Cnamespace>.servicebus.windows.net\";\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nvar credential = new DefaultAzureCredential(\n    DefaultAzureCredential.DefaultEnvironmentVariableName\n);\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-dotnet#credential-classes\n\u002F\u002F var credential = new ManagedIdentityCredential();\nawait using ServiceBusClient client = new(fullyQualifiedNamespace, credential);\n","csharp",[267],{"type":51,"tag":81,"props":268,"children":269},{"__ignoreMap":78},[270,278,286,295,304,313,322,331,340,349,358,367],{"type":51,"tag":85,"props":271,"children":272},{"class":87,"line":88},[273],{"type":51,"tag":85,"props":274,"children":275},{},[276],{"type":57,"value":277},"using Azure.Identity;\n",{"type":51,"tag":85,"props":279,"children":280},{"class":87,"line":114},[281],{"type":51,"tag":85,"props":282,"children":283},{},[284],{"type":57,"value":285},"using Azure.Messaging.ServiceBus;\n",{"type":51,"tag":85,"props":287,"children":288},{"class":87,"line":218},[289],{"type":51,"tag":85,"props":290,"children":292},{"emptyLinePlaceholder":291},true,[293],{"type":57,"value":294},"\n",{"type":51,"tag":85,"props":296,"children":298},{"class":87,"line":297},4,[299],{"type":51,"tag":85,"props":300,"children":301},{},[302],{"type":57,"value":303},"string fullyQualifiedNamespace = \"\u003Cnamespace>.servicebus.windows.net\";\n",{"type":51,"tag":85,"props":305,"children":307},{"class":87,"line":306},5,[308],{"type":51,"tag":85,"props":309,"children":310},{},[311],{"type":57,"value":312},"\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\n",{"type":51,"tag":85,"props":314,"children":316},{"class":87,"line":315},6,[317],{"type":51,"tag":85,"props":318,"children":319},{},[320],{"type":57,"value":321},"var credential = new DefaultAzureCredential(\n",{"type":51,"tag":85,"props":323,"children":325},{"class":87,"line":324},7,[326],{"type":51,"tag":85,"props":327,"children":328},{},[329],{"type":57,"value":330},"    DefaultAzureCredential.DefaultEnvironmentVariableName\n",{"type":51,"tag":85,"props":332,"children":334},{"class":87,"line":333},8,[335],{"type":51,"tag":85,"props":336,"children":337},{},[338],{"type":57,"value":339},");\n",{"type":51,"tag":85,"props":341,"children":343},{"class":87,"line":342},9,[344],{"type":51,"tag":85,"props":345,"children":346},{},[347],{"type":57,"value":348},"\u002F\u002F Or use a specific credential directly in production:\n",{"type":51,"tag":85,"props":350,"children":352},{"class":87,"line":351},10,[353],{"type":51,"tag":85,"props":354,"children":355},{},[356],{"type":57,"value":357},"\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-dotnet#credential-classes\n",{"type":51,"tag":85,"props":359,"children":361},{"class":87,"line":360},11,[362],{"type":51,"tag":85,"props":363,"children":364},{},[365],{"type":57,"value":366},"\u002F\u002F var credential = new ManagedIdentityCredential();\n",{"type":51,"tag":85,"props":368,"children":370},{"class":87,"line":369},12,[371],{"type":51,"tag":85,"props":372,"children":373},{},[374],{"type":57,"value":375},"await using ServiceBusClient client = new(fullyQualifiedNamespace, credential);\n",{"type":51,"tag":255,"props":377,"children":379},{"id":378},"connection-string",[380],{"type":57,"value":381},"Connection String",{"type":51,"tag":73,"props":383,"children":385},{"className":263,"code":384,"language":265,"meta":78,"style":78},"string connectionString = \"\u003Cconnection_string>\";\nawait using ServiceBusClient client = new(connectionString);\n",[386],{"type":51,"tag":81,"props":387,"children":388},{"__ignoreMap":78},[389,397],{"type":51,"tag":85,"props":390,"children":391},{"class":87,"line":88},[392],{"type":51,"tag":85,"props":393,"children":394},{},[395],{"type":57,"value":396},"string connectionString = \"\u003Cconnection_string>\";\n",{"type":51,"tag":85,"props":398,"children":399},{"class":87,"line":114},[400],{"type":51,"tag":85,"props":401,"children":402},{},[403],{"type":57,"value":404},"await using ServiceBusClient client = new(connectionString);\n",{"type":51,"tag":255,"props":406,"children":408},{"id":407},"aspnet-core-dependency-injection",[409],{"type":57,"value":410},"ASP.NET Core Dependency Injection",{"type":51,"tag":73,"props":412,"children":414},{"className":263,"code":413,"language":265,"meta":78,"style":78},"services.AddAzureClients(builder =>\n{\n    builder.AddServiceBusClientWithNamespace(\"\u003Cnamespace>.servicebus.windows.net\");\n    builder.UseCredential(new DefaultAzureCredential());\n});\n",[415],{"type":51,"tag":81,"props":416,"children":417},{"__ignoreMap":78},[418,426,434,442,450],{"type":51,"tag":85,"props":419,"children":420},{"class":87,"line":88},[421],{"type":51,"tag":85,"props":422,"children":423},{},[424],{"type":57,"value":425},"services.AddAzureClients(builder =>\n",{"type":51,"tag":85,"props":427,"children":428},{"class":87,"line":114},[429],{"type":51,"tag":85,"props":430,"children":431},{},[432],{"type":57,"value":433},"{\n",{"type":51,"tag":85,"props":435,"children":436},{"class":87,"line":218},[437],{"type":51,"tag":85,"props":438,"children":439},{},[440],{"type":57,"value":441},"    builder.AddServiceBusClientWithNamespace(\"\u003Cnamespace>.servicebus.windows.net\");\n",{"type":51,"tag":85,"props":443,"children":444},{"class":87,"line":297},[445],{"type":51,"tag":85,"props":446,"children":447},{},[448],{"type":57,"value":449},"    builder.UseCredential(new DefaultAzureCredential());\n",{"type":51,"tag":85,"props":451,"children":452},{"class":87,"line":306},[453],{"type":51,"tag":85,"props":454,"children":455},{},[456],{"type":57,"value":457},"});\n",{"type":51,"tag":66,"props":459,"children":461},{"id":460},"client-hierarchy",[462],{"type":57,"value":463},"Client Hierarchy",{"type":51,"tag":73,"props":465,"children":469},{"className":466,"code":468,"language":57},[467],"language-text","ServiceBusClient\n├── CreateSender(queueOrTopicName)      → ServiceBusSender\n├── CreateReceiver(queueName)           → ServiceBusReceiver\n├── CreateReceiver(topicName, subName)  → ServiceBusReceiver\n├── AcceptNextSessionAsync(queueName)   → ServiceBusSessionReceiver\n├── CreateProcessor(queueName)          → ServiceBusProcessor\n└── CreateSessionProcessor(queueName)   → ServiceBusSessionProcessor\n\nServiceBusAdministrationClient (separate client for CRUD)\n",[470],{"type":51,"tag":81,"props":471,"children":472},{"__ignoreMap":78},[473],{"type":57,"value":468},{"type":51,"tag":66,"props":475,"children":477},{"id":476},"core-workflows",[478],{"type":57,"value":479},"Core Workflows",{"type":51,"tag":255,"props":481,"children":483},{"id":482},"_1-send-messages",[484],{"type":57,"value":485},"1. Send Messages",{"type":51,"tag":73,"props":487,"children":489},{"className":263,"code":488,"language":265,"meta":78,"style":78},"await using ServiceBusClient client = new(fullyQualifiedNamespace, new DefaultAzureCredential());\nServiceBusSender sender = client.CreateSender(\"my-queue\");\n\n\u002F\u002F Single message\nServiceBusMessage message = new(\"Hello world!\");\nawait sender.SendMessageAsync(message);\n\n\u002F\u002F Safe batching (recommended)\nusing ServiceBusMessageBatch batch = await sender.CreateMessageBatchAsync();\nif (batch.TryAddMessage(new ServiceBusMessage(\"Message 1\")))\n{\n    \u002F\u002F Message added successfully\n}\nif (batch.TryAddMessage(new ServiceBusMessage(\"Message 2\")))\n{\n    \u002F\u002F Message added successfully\n}\nawait sender.SendMessagesAsync(batch);\n",[490],{"type":51,"tag":81,"props":491,"children":492},{"__ignoreMap":78},[493,501,509,516,524,532,540,547,555,563,571,578,586,595,604,612,620,628],{"type":51,"tag":85,"props":494,"children":495},{"class":87,"line":88},[496],{"type":51,"tag":85,"props":497,"children":498},{},[499],{"type":57,"value":500},"await using ServiceBusClient client = new(fullyQualifiedNamespace, new DefaultAzureCredential());\n",{"type":51,"tag":85,"props":502,"children":503},{"class":87,"line":114},[504],{"type":51,"tag":85,"props":505,"children":506},{},[507],{"type":57,"value":508},"ServiceBusSender sender = client.CreateSender(\"my-queue\");\n",{"type":51,"tag":85,"props":510,"children":511},{"class":87,"line":218},[512],{"type":51,"tag":85,"props":513,"children":514},{"emptyLinePlaceholder":291},[515],{"type":57,"value":294},{"type":51,"tag":85,"props":517,"children":518},{"class":87,"line":297},[519],{"type":51,"tag":85,"props":520,"children":521},{},[522],{"type":57,"value":523},"\u002F\u002F Single message\n",{"type":51,"tag":85,"props":525,"children":526},{"class":87,"line":306},[527],{"type":51,"tag":85,"props":528,"children":529},{},[530],{"type":57,"value":531},"ServiceBusMessage message = new(\"Hello world!\");\n",{"type":51,"tag":85,"props":533,"children":534},{"class":87,"line":315},[535],{"type":51,"tag":85,"props":536,"children":537},{},[538],{"type":57,"value":539},"await sender.SendMessageAsync(message);\n",{"type":51,"tag":85,"props":541,"children":542},{"class":87,"line":324},[543],{"type":51,"tag":85,"props":544,"children":545},{"emptyLinePlaceholder":291},[546],{"type":57,"value":294},{"type":51,"tag":85,"props":548,"children":549},{"class":87,"line":333},[550],{"type":51,"tag":85,"props":551,"children":552},{},[553],{"type":57,"value":554},"\u002F\u002F Safe batching (recommended)\n",{"type":51,"tag":85,"props":556,"children":557},{"class":87,"line":342},[558],{"type":51,"tag":85,"props":559,"children":560},{},[561],{"type":57,"value":562},"using ServiceBusMessageBatch batch = await sender.CreateMessageBatchAsync();\n",{"type":51,"tag":85,"props":564,"children":565},{"class":87,"line":351},[566],{"type":51,"tag":85,"props":567,"children":568},{},[569],{"type":57,"value":570},"if (batch.TryAddMessage(new ServiceBusMessage(\"Message 1\")))\n",{"type":51,"tag":85,"props":572,"children":573},{"class":87,"line":360},[574],{"type":51,"tag":85,"props":575,"children":576},{},[577],{"type":57,"value":433},{"type":51,"tag":85,"props":579,"children":580},{"class":87,"line":369},[581],{"type":51,"tag":85,"props":582,"children":583},{},[584],{"type":57,"value":585},"    \u002F\u002F Message added successfully\n",{"type":51,"tag":85,"props":587,"children":589},{"class":87,"line":588},13,[590],{"type":51,"tag":85,"props":591,"children":592},{},[593],{"type":57,"value":594},"}\n",{"type":51,"tag":85,"props":596,"children":598},{"class":87,"line":597},14,[599],{"type":51,"tag":85,"props":600,"children":601},{},[602],{"type":57,"value":603},"if (batch.TryAddMessage(new ServiceBusMessage(\"Message 2\")))\n",{"type":51,"tag":85,"props":605,"children":607},{"class":87,"line":606},15,[608],{"type":51,"tag":85,"props":609,"children":610},{},[611],{"type":57,"value":433},{"type":51,"tag":85,"props":613,"children":615},{"class":87,"line":614},16,[616],{"type":51,"tag":85,"props":617,"children":618},{},[619],{"type":57,"value":585},{"type":51,"tag":85,"props":621,"children":623},{"class":87,"line":622},17,[624],{"type":51,"tag":85,"props":625,"children":626},{},[627],{"type":57,"value":594},{"type":51,"tag":85,"props":629,"children":631},{"class":87,"line":630},18,[632],{"type":51,"tag":85,"props":633,"children":634},{},[635],{"type":57,"value":636},"await sender.SendMessagesAsync(batch);\n",{"type":51,"tag":255,"props":638,"children":640},{"id":639},"_2-receive-messages",[641],{"type":57,"value":642},"2. Receive Messages",{"type":51,"tag":73,"props":644,"children":646},{"className":263,"code":645,"language":265,"meta":78,"style":78},"ServiceBusReceiver receiver = client.CreateReceiver(\"my-queue\");\n\n\u002F\u002F Single message\nServiceBusReceivedMessage message = await receiver.ReceiveMessageAsync();\nstring body = message.Body.ToString();\nConsole.WriteLine(body);\n\n\u002F\u002F Complete the message (removes from queue)\nawait receiver.CompleteMessageAsync(message);\n\n\u002F\u002F Batch receive\nIReadOnlyList\u003CServiceBusReceivedMessage> messages = await receiver.ReceiveMessagesAsync(maxMessages: 10);\nforeach (var msg in messages)\n{\n    Console.WriteLine(msg.Body.ToString());\n    await receiver.CompleteMessageAsync(msg);\n}\n",[647],{"type":51,"tag":81,"props":648,"children":649},{"__ignoreMap":78},[650,658,665,672,680,688,696,703,711,719,726,734,742,750,757,765,773],{"type":51,"tag":85,"props":651,"children":652},{"class":87,"line":88},[653],{"type":51,"tag":85,"props":654,"children":655},{},[656],{"type":57,"value":657},"ServiceBusReceiver receiver = client.CreateReceiver(\"my-queue\");\n",{"type":51,"tag":85,"props":659,"children":660},{"class":87,"line":114},[661],{"type":51,"tag":85,"props":662,"children":663},{"emptyLinePlaceholder":291},[664],{"type":57,"value":294},{"type":51,"tag":85,"props":666,"children":667},{"class":87,"line":218},[668],{"type":51,"tag":85,"props":669,"children":670},{},[671],{"type":57,"value":523},{"type":51,"tag":85,"props":673,"children":674},{"class":87,"line":297},[675],{"type":51,"tag":85,"props":676,"children":677},{},[678],{"type":57,"value":679},"ServiceBusReceivedMessage message = await receiver.ReceiveMessageAsync();\n",{"type":51,"tag":85,"props":681,"children":682},{"class":87,"line":306},[683],{"type":51,"tag":85,"props":684,"children":685},{},[686],{"type":57,"value":687},"string body = message.Body.ToString();\n",{"type":51,"tag":85,"props":689,"children":690},{"class":87,"line":315},[691],{"type":51,"tag":85,"props":692,"children":693},{},[694],{"type":57,"value":695},"Console.WriteLine(body);\n",{"type":51,"tag":85,"props":697,"children":698},{"class":87,"line":324},[699],{"type":51,"tag":85,"props":700,"children":701},{"emptyLinePlaceholder":291},[702],{"type":57,"value":294},{"type":51,"tag":85,"props":704,"children":705},{"class":87,"line":333},[706],{"type":51,"tag":85,"props":707,"children":708},{},[709],{"type":57,"value":710},"\u002F\u002F Complete the message (removes from queue)\n",{"type":51,"tag":85,"props":712,"children":713},{"class":87,"line":342},[714],{"type":51,"tag":85,"props":715,"children":716},{},[717],{"type":57,"value":718},"await receiver.CompleteMessageAsync(message);\n",{"type":51,"tag":85,"props":720,"children":721},{"class":87,"line":351},[722],{"type":51,"tag":85,"props":723,"children":724},{"emptyLinePlaceholder":291},[725],{"type":57,"value":294},{"type":51,"tag":85,"props":727,"children":728},{"class":87,"line":360},[729],{"type":51,"tag":85,"props":730,"children":731},{},[732],{"type":57,"value":733},"\u002F\u002F Batch receive\n",{"type":51,"tag":85,"props":735,"children":736},{"class":87,"line":369},[737],{"type":51,"tag":85,"props":738,"children":739},{},[740],{"type":57,"value":741},"IReadOnlyList\u003CServiceBusReceivedMessage> messages = await receiver.ReceiveMessagesAsync(maxMessages: 10);\n",{"type":51,"tag":85,"props":743,"children":744},{"class":87,"line":588},[745],{"type":51,"tag":85,"props":746,"children":747},{},[748],{"type":57,"value":749},"foreach (var msg in messages)\n",{"type":51,"tag":85,"props":751,"children":752},{"class":87,"line":597},[753],{"type":51,"tag":85,"props":754,"children":755},{},[756],{"type":57,"value":433},{"type":51,"tag":85,"props":758,"children":759},{"class":87,"line":606},[760],{"type":51,"tag":85,"props":761,"children":762},{},[763],{"type":57,"value":764},"    Console.WriteLine(msg.Body.ToString());\n",{"type":51,"tag":85,"props":766,"children":767},{"class":87,"line":614},[768],{"type":51,"tag":85,"props":769,"children":770},{},[771],{"type":57,"value":772},"    await receiver.CompleteMessageAsync(msg);\n",{"type":51,"tag":85,"props":774,"children":775},{"class":87,"line":622},[776],{"type":51,"tag":85,"props":777,"children":778},{},[779],{"type":57,"value":594},{"type":51,"tag":255,"props":781,"children":783},{"id":782},"_3-message-settlement",[784],{"type":57,"value":785},"3. Message Settlement",{"type":51,"tag":73,"props":787,"children":789},{"className":263,"code":788,"language":265,"meta":78,"style":78},"\u002F\u002F Complete - removes message from queue\nawait receiver.CompleteMessageAsync(message);\n\n\u002F\u002F Abandon - releases lock, message can be received again\nawait receiver.AbandonMessageAsync(message);\n\n\u002F\u002F Defer - prevents normal receive, use ReceiveDeferredMessageAsync\nawait receiver.DeferMessageAsync(message);\n\n\u002F\u002F Dead Letter - moves to dead letter subqueue\nawait receiver.DeadLetterMessageAsync(message, \"InvalidFormat\", \"Message body was not valid JSON\");\n",[790],{"type":51,"tag":81,"props":791,"children":792},{"__ignoreMap":78},[793,801,808,815,823,831,838,846,854,861,869],{"type":51,"tag":85,"props":794,"children":795},{"class":87,"line":88},[796],{"type":51,"tag":85,"props":797,"children":798},{},[799],{"type":57,"value":800},"\u002F\u002F Complete - removes message from queue\n",{"type":51,"tag":85,"props":802,"children":803},{"class":87,"line":114},[804],{"type":51,"tag":85,"props":805,"children":806},{},[807],{"type":57,"value":718},{"type":51,"tag":85,"props":809,"children":810},{"class":87,"line":218},[811],{"type":51,"tag":85,"props":812,"children":813},{"emptyLinePlaceholder":291},[814],{"type":57,"value":294},{"type":51,"tag":85,"props":816,"children":817},{"class":87,"line":297},[818],{"type":51,"tag":85,"props":819,"children":820},{},[821],{"type":57,"value":822},"\u002F\u002F Abandon - releases lock, message can be received again\n",{"type":51,"tag":85,"props":824,"children":825},{"class":87,"line":306},[826],{"type":51,"tag":85,"props":827,"children":828},{},[829],{"type":57,"value":830},"await receiver.AbandonMessageAsync(message);\n",{"type":51,"tag":85,"props":832,"children":833},{"class":87,"line":315},[834],{"type":51,"tag":85,"props":835,"children":836},{"emptyLinePlaceholder":291},[837],{"type":57,"value":294},{"type":51,"tag":85,"props":839,"children":840},{"class":87,"line":324},[841],{"type":51,"tag":85,"props":842,"children":843},{},[844],{"type":57,"value":845},"\u002F\u002F Defer - prevents normal receive, use ReceiveDeferredMessageAsync\n",{"type":51,"tag":85,"props":847,"children":848},{"class":87,"line":333},[849],{"type":51,"tag":85,"props":850,"children":851},{},[852],{"type":57,"value":853},"await receiver.DeferMessageAsync(message);\n",{"type":51,"tag":85,"props":855,"children":856},{"class":87,"line":342},[857],{"type":51,"tag":85,"props":858,"children":859},{"emptyLinePlaceholder":291},[860],{"type":57,"value":294},{"type":51,"tag":85,"props":862,"children":863},{"class":87,"line":351},[864],{"type":51,"tag":85,"props":865,"children":866},{},[867],{"type":57,"value":868},"\u002F\u002F Dead Letter - moves to dead letter subqueue\n",{"type":51,"tag":85,"props":870,"children":871},{"class":87,"line":360},[872],{"type":51,"tag":85,"props":873,"children":874},{},[875],{"type":57,"value":876},"await receiver.DeadLetterMessageAsync(message, \"InvalidFormat\", \"Message body was not valid JSON\");\n",{"type":51,"tag":255,"props":878,"children":880},{"id":879},"_4-background-processing-with-processor",[881],{"type":57,"value":882},"4. Background Processing with Processor",{"type":51,"tag":73,"props":884,"children":886},{"className":263,"code":885,"language":265,"meta":78,"style":78},"ServiceBusProcessor processor = client.CreateProcessor(\"my-queue\", new ServiceBusProcessorOptions\n{\n    AutoCompleteMessages = false,\n    MaxConcurrentCalls = 2\n});\n\nprocessor.ProcessMessageAsync += async (args) =>\n{\n    try\n    {\n        string body = args.Message.Body.ToString();\n        Console.WriteLine($\"Received: {body}\");\n        await args.CompleteMessageAsync(args.Message);\n    }\n    catch (Exception ex)\n    {\n        Console.WriteLine($\"Error processing: {ex.Message}\");\n        await args.AbandonMessageAsync(args.Message);\n    }\n};\n\nprocessor.ProcessErrorAsync += (args) =>\n{\n    Console.WriteLine($\"Error source: {args.ErrorSource}\");\n    Console.WriteLine($\"Entity: {args.EntityPath}\");\n    Console.WriteLine($\"Exception: {args.Exception}\");\n    return Task.CompletedTask;\n};\n\nawait processor.StartProcessingAsync();\n\u002F\u002F ... application runs\nawait processor.StopProcessingAsync();\n",[887],{"type":51,"tag":81,"props":888,"children":889},{"__ignoreMap":78},[890,898,905,913,921,928,935,943,950,958,966,974,982,990,998,1006,1013,1021,1029,1037,1046,1054,1063,1071,1080,1089,1098,1107,1115,1123,1132,1141],{"type":51,"tag":85,"props":891,"children":892},{"class":87,"line":88},[893],{"type":51,"tag":85,"props":894,"children":895},{},[896],{"type":57,"value":897},"ServiceBusProcessor processor = client.CreateProcessor(\"my-queue\", new ServiceBusProcessorOptions\n",{"type":51,"tag":85,"props":899,"children":900},{"class":87,"line":114},[901],{"type":51,"tag":85,"props":902,"children":903},{},[904],{"type":57,"value":433},{"type":51,"tag":85,"props":906,"children":907},{"class":87,"line":218},[908],{"type":51,"tag":85,"props":909,"children":910},{},[911],{"type":57,"value":912},"    AutoCompleteMessages = false,\n",{"type":51,"tag":85,"props":914,"children":915},{"class":87,"line":297},[916],{"type":51,"tag":85,"props":917,"children":918},{},[919],{"type":57,"value":920},"    MaxConcurrentCalls = 2\n",{"type":51,"tag":85,"props":922,"children":923},{"class":87,"line":306},[924],{"type":51,"tag":85,"props":925,"children":926},{},[927],{"type":57,"value":457},{"type":51,"tag":85,"props":929,"children":930},{"class":87,"line":315},[931],{"type":51,"tag":85,"props":932,"children":933},{"emptyLinePlaceholder":291},[934],{"type":57,"value":294},{"type":51,"tag":85,"props":936,"children":937},{"class":87,"line":324},[938],{"type":51,"tag":85,"props":939,"children":940},{},[941],{"type":57,"value":942},"processor.ProcessMessageAsync += async (args) =>\n",{"type":51,"tag":85,"props":944,"children":945},{"class":87,"line":333},[946],{"type":51,"tag":85,"props":947,"children":948},{},[949],{"type":57,"value":433},{"type":51,"tag":85,"props":951,"children":952},{"class":87,"line":342},[953],{"type":51,"tag":85,"props":954,"children":955},{},[956],{"type":57,"value":957},"    try\n",{"type":51,"tag":85,"props":959,"children":960},{"class":87,"line":351},[961],{"type":51,"tag":85,"props":962,"children":963},{},[964],{"type":57,"value":965},"    {\n",{"type":51,"tag":85,"props":967,"children":968},{"class":87,"line":360},[969],{"type":51,"tag":85,"props":970,"children":971},{},[972],{"type":57,"value":973},"        string body = args.Message.Body.ToString();\n",{"type":51,"tag":85,"props":975,"children":976},{"class":87,"line":369},[977],{"type":51,"tag":85,"props":978,"children":979},{},[980],{"type":57,"value":981},"        Console.WriteLine($\"Received: {body}\");\n",{"type":51,"tag":85,"props":983,"children":984},{"class":87,"line":588},[985],{"type":51,"tag":85,"props":986,"children":987},{},[988],{"type":57,"value":989},"        await args.CompleteMessageAsync(args.Message);\n",{"type":51,"tag":85,"props":991,"children":992},{"class":87,"line":597},[993],{"type":51,"tag":85,"props":994,"children":995},{},[996],{"type":57,"value":997},"    }\n",{"type":51,"tag":85,"props":999,"children":1000},{"class":87,"line":606},[1001],{"type":51,"tag":85,"props":1002,"children":1003},{},[1004],{"type":57,"value":1005},"    catch (Exception ex)\n",{"type":51,"tag":85,"props":1007,"children":1008},{"class":87,"line":614},[1009],{"type":51,"tag":85,"props":1010,"children":1011},{},[1012],{"type":57,"value":965},{"type":51,"tag":85,"props":1014,"children":1015},{"class":87,"line":622},[1016],{"type":51,"tag":85,"props":1017,"children":1018},{},[1019],{"type":57,"value":1020},"        Console.WriteLine($\"Error processing: {ex.Message}\");\n",{"type":51,"tag":85,"props":1022,"children":1023},{"class":87,"line":630},[1024],{"type":51,"tag":85,"props":1025,"children":1026},{},[1027],{"type":57,"value":1028},"        await args.AbandonMessageAsync(args.Message);\n",{"type":51,"tag":85,"props":1030,"children":1032},{"class":87,"line":1031},19,[1033],{"type":51,"tag":85,"props":1034,"children":1035},{},[1036],{"type":57,"value":997},{"type":51,"tag":85,"props":1038,"children":1040},{"class":87,"line":1039},20,[1041],{"type":51,"tag":85,"props":1042,"children":1043},{},[1044],{"type":57,"value":1045},"};\n",{"type":51,"tag":85,"props":1047,"children":1049},{"class":87,"line":1048},21,[1050],{"type":51,"tag":85,"props":1051,"children":1052},{"emptyLinePlaceholder":291},[1053],{"type":57,"value":294},{"type":51,"tag":85,"props":1055,"children":1057},{"class":87,"line":1056},22,[1058],{"type":51,"tag":85,"props":1059,"children":1060},{},[1061],{"type":57,"value":1062},"processor.ProcessErrorAsync += (args) =>\n",{"type":51,"tag":85,"props":1064,"children":1066},{"class":87,"line":1065},23,[1067],{"type":51,"tag":85,"props":1068,"children":1069},{},[1070],{"type":57,"value":433},{"type":51,"tag":85,"props":1072,"children":1074},{"class":87,"line":1073},24,[1075],{"type":51,"tag":85,"props":1076,"children":1077},{},[1078],{"type":57,"value":1079},"    Console.WriteLine($\"Error source: {args.ErrorSource}\");\n",{"type":51,"tag":85,"props":1081,"children":1083},{"class":87,"line":1082},25,[1084],{"type":51,"tag":85,"props":1085,"children":1086},{},[1087],{"type":57,"value":1088},"    Console.WriteLine($\"Entity: {args.EntityPath}\");\n",{"type":51,"tag":85,"props":1090,"children":1092},{"class":87,"line":1091},26,[1093],{"type":51,"tag":85,"props":1094,"children":1095},{},[1096],{"type":57,"value":1097},"    Console.WriteLine($\"Exception: {args.Exception}\");\n",{"type":51,"tag":85,"props":1099,"children":1101},{"class":87,"line":1100},27,[1102],{"type":51,"tag":85,"props":1103,"children":1104},{},[1105],{"type":57,"value":1106},"    return Task.CompletedTask;\n",{"type":51,"tag":85,"props":1108,"children":1110},{"class":87,"line":1109},28,[1111],{"type":51,"tag":85,"props":1112,"children":1113},{},[1114],{"type":57,"value":1045},{"type":51,"tag":85,"props":1116,"children":1118},{"class":87,"line":1117},29,[1119],{"type":51,"tag":85,"props":1120,"children":1121},{"emptyLinePlaceholder":291},[1122],{"type":57,"value":294},{"type":51,"tag":85,"props":1124,"children":1126},{"class":87,"line":1125},30,[1127],{"type":51,"tag":85,"props":1128,"children":1129},{},[1130],{"type":57,"value":1131},"await processor.StartProcessingAsync();\n",{"type":51,"tag":85,"props":1133,"children":1135},{"class":87,"line":1134},31,[1136],{"type":51,"tag":85,"props":1137,"children":1138},{},[1139],{"type":57,"value":1140},"\u002F\u002F ... application runs\n",{"type":51,"tag":85,"props":1142,"children":1144},{"class":87,"line":1143},32,[1145],{"type":51,"tag":85,"props":1146,"children":1147},{},[1148],{"type":57,"value":1149},"await processor.StopProcessingAsync();\n",{"type":51,"tag":255,"props":1151,"children":1153},{"id":1152},"_5-sessions-ordered-processing",[1154],{"type":57,"value":1155},"5. Sessions (Ordered Processing)",{"type":51,"tag":73,"props":1157,"children":1159},{"className":263,"code":1158,"language":265,"meta":78,"style":78},"\u002F\u002F Send session message\nServiceBusMessage message = new(\"Hello\")\n{\n    SessionId = \"order-123\"\n};\nawait sender.SendMessageAsync(message);\n\n\u002F\u002F Receive from next available session\nServiceBusSessionReceiver receiver = await client.AcceptNextSessionAsync(\"my-queue\");\n\n\u002F\u002F Or receive from specific session\nServiceBusSessionReceiver receiver = await client.AcceptSessionAsync(\"my-queue\", \"order-123\");\n\n\u002F\u002F Session state management\nawait receiver.SetSessionStateAsync(new BinaryData(\"processing\"));\nBinaryData state = await receiver.GetSessionStateAsync();\n\n\u002F\u002F Renew session lock\nawait receiver.RenewSessionLockAsync();\n",[1160],{"type":51,"tag":81,"props":1161,"children":1162},{"__ignoreMap":78},[1163,1171,1179,1186,1194,1201,1208,1215,1223,1231,1238,1246,1254,1261,1269,1277,1285,1292,1300],{"type":51,"tag":85,"props":1164,"children":1165},{"class":87,"line":88},[1166],{"type":51,"tag":85,"props":1167,"children":1168},{},[1169],{"type":57,"value":1170},"\u002F\u002F Send session message\n",{"type":51,"tag":85,"props":1172,"children":1173},{"class":87,"line":114},[1174],{"type":51,"tag":85,"props":1175,"children":1176},{},[1177],{"type":57,"value":1178},"ServiceBusMessage message = new(\"Hello\")\n",{"type":51,"tag":85,"props":1180,"children":1181},{"class":87,"line":218},[1182],{"type":51,"tag":85,"props":1183,"children":1184},{},[1185],{"type":57,"value":433},{"type":51,"tag":85,"props":1187,"children":1188},{"class":87,"line":297},[1189],{"type":51,"tag":85,"props":1190,"children":1191},{},[1192],{"type":57,"value":1193},"    SessionId = \"order-123\"\n",{"type":51,"tag":85,"props":1195,"children":1196},{"class":87,"line":306},[1197],{"type":51,"tag":85,"props":1198,"children":1199},{},[1200],{"type":57,"value":1045},{"type":51,"tag":85,"props":1202,"children":1203},{"class":87,"line":315},[1204],{"type":51,"tag":85,"props":1205,"children":1206},{},[1207],{"type":57,"value":539},{"type":51,"tag":85,"props":1209,"children":1210},{"class":87,"line":324},[1211],{"type":51,"tag":85,"props":1212,"children":1213},{"emptyLinePlaceholder":291},[1214],{"type":57,"value":294},{"type":51,"tag":85,"props":1216,"children":1217},{"class":87,"line":333},[1218],{"type":51,"tag":85,"props":1219,"children":1220},{},[1221],{"type":57,"value":1222},"\u002F\u002F Receive from next available session\n",{"type":51,"tag":85,"props":1224,"children":1225},{"class":87,"line":342},[1226],{"type":51,"tag":85,"props":1227,"children":1228},{},[1229],{"type":57,"value":1230},"ServiceBusSessionReceiver receiver = await client.AcceptNextSessionAsync(\"my-queue\");\n",{"type":51,"tag":85,"props":1232,"children":1233},{"class":87,"line":351},[1234],{"type":51,"tag":85,"props":1235,"children":1236},{"emptyLinePlaceholder":291},[1237],{"type":57,"value":294},{"type":51,"tag":85,"props":1239,"children":1240},{"class":87,"line":360},[1241],{"type":51,"tag":85,"props":1242,"children":1243},{},[1244],{"type":57,"value":1245},"\u002F\u002F Or receive from specific session\n",{"type":51,"tag":85,"props":1247,"children":1248},{"class":87,"line":369},[1249],{"type":51,"tag":85,"props":1250,"children":1251},{},[1252],{"type":57,"value":1253},"ServiceBusSessionReceiver receiver = await client.AcceptSessionAsync(\"my-queue\", \"order-123\");\n",{"type":51,"tag":85,"props":1255,"children":1256},{"class":87,"line":588},[1257],{"type":51,"tag":85,"props":1258,"children":1259},{"emptyLinePlaceholder":291},[1260],{"type":57,"value":294},{"type":51,"tag":85,"props":1262,"children":1263},{"class":87,"line":597},[1264],{"type":51,"tag":85,"props":1265,"children":1266},{},[1267],{"type":57,"value":1268},"\u002F\u002F Session state management\n",{"type":51,"tag":85,"props":1270,"children":1271},{"class":87,"line":606},[1272],{"type":51,"tag":85,"props":1273,"children":1274},{},[1275],{"type":57,"value":1276},"await receiver.SetSessionStateAsync(new BinaryData(\"processing\"));\n",{"type":51,"tag":85,"props":1278,"children":1279},{"class":87,"line":614},[1280],{"type":51,"tag":85,"props":1281,"children":1282},{},[1283],{"type":57,"value":1284},"BinaryData state = await receiver.GetSessionStateAsync();\n",{"type":51,"tag":85,"props":1286,"children":1287},{"class":87,"line":622},[1288],{"type":51,"tag":85,"props":1289,"children":1290},{"emptyLinePlaceholder":291},[1291],{"type":57,"value":294},{"type":51,"tag":85,"props":1293,"children":1294},{"class":87,"line":630},[1295],{"type":51,"tag":85,"props":1296,"children":1297},{},[1298],{"type":57,"value":1299},"\u002F\u002F Renew session lock\n",{"type":51,"tag":85,"props":1301,"children":1302},{"class":87,"line":1031},[1303],{"type":51,"tag":85,"props":1304,"children":1305},{},[1306],{"type":57,"value":1307},"await receiver.RenewSessionLockAsync();\n",{"type":51,"tag":255,"props":1309,"children":1311},{"id":1310},"_6-dead-letter-queue",[1312],{"type":57,"value":1313},"6. Dead Letter Queue",{"type":51,"tag":73,"props":1315,"children":1317},{"className":263,"code":1316,"language":265,"meta":78,"style":78},"\u002F\u002F Receive from dead letter queue\nServiceBusReceiver dlqReceiver = client.CreateReceiver(\"my-queue\", new ServiceBusReceiverOptions\n{\n    SubQueue = SubQueue.DeadLetter\n});\n\nServiceBusReceivedMessage dlqMessage = await dlqReceiver.ReceiveMessageAsync();\n\n\u002F\u002F Access dead letter metadata\nstring reason = dlqMessage.DeadLetterReason;\nstring description = dlqMessage.DeadLetterErrorDescription;\nConsole.WriteLine($\"Dead letter reason: {reason} - {description}\");\n",[1318],{"type":51,"tag":81,"props":1319,"children":1320},{"__ignoreMap":78},[1321,1329,1337,1344,1352,1359,1366,1374,1381,1389,1397,1405],{"type":51,"tag":85,"props":1322,"children":1323},{"class":87,"line":88},[1324],{"type":51,"tag":85,"props":1325,"children":1326},{},[1327],{"type":57,"value":1328},"\u002F\u002F Receive from dead letter queue\n",{"type":51,"tag":85,"props":1330,"children":1331},{"class":87,"line":114},[1332],{"type":51,"tag":85,"props":1333,"children":1334},{},[1335],{"type":57,"value":1336},"ServiceBusReceiver dlqReceiver = client.CreateReceiver(\"my-queue\", new ServiceBusReceiverOptions\n",{"type":51,"tag":85,"props":1338,"children":1339},{"class":87,"line":218},[1340],{"type":51,"tag":85,"props":1341,"children":1342},{},[1343],{"type":57,"value":433},{"type":51,"tag":85,"props":1345,"children":1346},{"class":87,"line":297},[1347],{"type":51,"tag":85,"props":1348,"children":1349},{},[1350],{"type":57,"value":1351},"    SubQueue = SubQueue.DeadLetter\n",{"type":51,"tag":85,"props":1353,"children":1354},{"class":87,"line":306},[1355],{"type":51,"tag":85,"props":1356,"children":1357},{},[1358],{"type":57,"value":457},{"type":51,"tag":85,"props":1360,"children":1361},{"class":87,"line":315},[1362],{"type":51,"tag":85,"props":1363,"children":1364},{"emptyLinePlaceholder":291},[1365],{"type":57,"value":294},{"type":51,"tag":85,"props":1367,"children":1368},{"class":87,"line":324},[1369],{"type":51,"tag":85,"props":1370,"children":1371},{},[1372],{"type":57,"value":1373},"ServiceBusReceivedMessage dlqMessage = await dlqReceiver.ReceiveMessageAsync();\n",{"type":51,"tag":85,"props":1375,"children":1376},{"class":87,"line":333},[1377],{"type":51,"tag":85,"props":1378,"children":1379},{"emptyLinePlaceholder":291},[1380],{"type":57,"value":294},{"type":51,"tag":85,"props":1382,"children":1383},{"class":87,"line":342},[1384],{"type":51,"tag":85,"props":1385,"children":1386},{},[1387],{"type":57,"value":1388},"\u002F\u002F Access dead letter metadata\n",{"type":51,"tag":85,"props":1390,"children":1391},{"class":87,"line":351},[1392],{"type":51,"tag":85,"props":1393,"children":1394},{},[1395],{"type":57,"value":1396},"string reason = dlqMessage.DeadLetterReason;\n",{"type":51,"tag":85,"props":1398,"children":1399},{"class":87,"line":360},[1400],{"type":51,"tag":85,"props":1401,"children":1402},{},[1403],{"type":57,"value":1404},"string description = dlqMessage.DeadLetterErrorDescription;\n",{"type":51,"tag":85,"props":1406,"children":1407},{"class":87,"line":369},[1408],{"type":51,"tag":85,"props":1409,"children":1410},{},[1411],{"type":57,"value":1412},"Console.WriteLine($\"Dead letter reason: {reason} - {description}\");\n",{"type":51,"tag":255,"props":1414,"children":1416},{"id":1415},"_7-topics-and-subscriptions",[1417],{"type":57,"value":1418},"7. Topics and Subscriptions",{"type":51,"tag":73,"props":1420,"children":1422},{"className":263,"code":1421,"language":265,"meta":78,"style":78},"\u002F\u002F Send to topic\nServiceBusSender topicSender = client.CreateSender(\"my-topic\");\nawait topicSender.SendMessageAsync(new ServiceBusMessage(\"Broadcast message\"));\n\n\u002F\u002F Receive from subscription\nServiceBusReceiver subReceiver = client.CreateReceiver(\"my-topic\", \"my-subscription\");\nvar message = await subReceiver.ReceiveMessageAsync();\n",[1423],{"type":51,"tag":81,"props":1424,"children":1425},{"__ignoreMap":78},[1426,1434,1442,1450,1457,1465,1473],{"type":51,"tag":85,"props":1427,"children":1428},{"class":87,"line":88},[1429],{"type":51,"tag":85,"props":1430,"children":1431},{},[1432],{"type":57,"value":1433},"\u002F\u002F Send to topic\n",{"type":51,"tag":85,"props":1435,"children":1436},{"class":87,"line":114},[1437],{"type":51,"tag":85,"props":1438,"children":1439},{},[1440],{"type":57,"value":1441},"ServiceBusSender topicSender = client.CreateSender(\"my-topic\");\n",{"type":51,"tag":85,"props":1443,"children":1444},{"class":87,"line":218},[1445],{"type":51,"tag":85,"props":1446,"children":1447},{},[1448],{"type":57,"value":1449},"await topicSender.SendMessageAsync(new ServiceBusMessage(\"Broadcast message\"));\n",{"type":51,"tag":85,"props":1451,"children":1452},{"class":87,"line":297},[1453],{"type":51,"tag":85,"props":1454,"children":1455},{"emptyLinePlaceholder":291},[1456],{"type":57,"value":294},{"type":51,"tag":85,"props":1458,"children":1459},{"class":87,"line":306},[1460],{"type":51,"tag":85,"props":1461,"children":1462},{},[1463],{"type":57,"value":1464},"\u002F\u002F Receive from subscription\n",{"type":51,"tag":85,"props":1466,"children":1467},{"class":87,"line":315},[1468],{"type":51,"tag":85,"props":1469,"children":1470},{},[1471],{"type":57,"value":1472},"ServiceBusReceiver subReceiver = client.CreateReceiver(\"my-topic\", \"my-subscription\");\n",{"type":51,"tag":85,"props":1474,"children":1475},{"class":87,"line":324},[1476],{"type":51,"tag":85,"props":1477,"children":1478},{},[1479],{"type":57,"value":1480},"var message = await subReceiver.ReceiveMessageAsync();\n",{"type":51,"tag":255,"props":1482,"children":1484},{"id":1483},"_8-administration-crud",[1485],{"type":57,"value":1486},"8. Administration (CRUD)",{"type":51,"tag":73,"props":1488,"children":1490},{"className":263,"code":1489,"language":265,"meta":78,"style":78},"var adminClient = new ServiceBusAdministrationClient(\n    fullyQualifiedNamespace, \n    new DefaultAzureCredential());\n\n\u002F\u002F Create queue\nvar options = new CreateQueueOptions(\"my-queue\")\n{\n    MaxDeliveryCount = 10,\n    LockDuration = TimeSpan.FromSeconds(30),\n    RequiresSession = true,\n    DeadLetteringOnMessageExpiration = true\n};\nQueueProperties queue = await adminClient.CreateQueueAsync(options);\n\n\u002F\u002F Update queue\nqueue.LockDuration = TimeSpan.FromSeconds(60);\nawait adminClient.UpdateQueueAsync(queue);\n\n\u002F\u002F Create topic and subscription\nawait adminClient.CreateTopicAsync(new CreateTopicOptions(\"my-topic\"));\nawait adminClient.CreateSubscriptionAsync(new CreateSubscriptionOptions(\"my-topic\", \"my-subscription\"));\n\n\u002F\u002F Delete\nawait adminClient.DeleteQueueAsync(\"my-queue\");\n",[1491],{"type":51,"tag":81,"props":1492,"children":1493},{"__ignoreMap":78},[1494,1502,1510,1518,1525,1533,1541,1548,1556,1564,1572,1580,1587,1595,1602,1610,1618,1626,1633,1641,1649,1657,1664,1672],{"type":51,"tag":85,"props":1495,"children":1496},{"class":87,"line":88},[1497],{"type":51,"tag":85,"props":1498,"children":1499},{},[1500],{"type":57,"value":1501},"var adminClient = new ServiceBusAdministrationClient(\n",{"type":51,"tag":85,"props":1503,"children":1504},{"class":87,"line":114},[1505],{"type":51,"tag":85,"props":1506,"children":1507},{},[1508],{"type":57,"value":1509},"    fullyQualifiedNamespace, \n",{"type":51,"tag":85,"props":1511,"children":1512},{"class":87,"line":218},[1513],{"type":51,"tag":85,"props":1514,"children":1515},{},[1516],{"type":57,"value":1517},"    new DefaultAzureCredential());\n",{"type":51,"tag":85,"props":1519,"children":1520},{"class":87,"line":297},[1521],{"type":51,"tag":85,"props":1522,"children":1523},{"emptyLinePlaceholder":291},[1524],{"type":57,"value":294},{"type":51,"tag":85,"props":1526,"children":1527},{"class":87,"line":306},[1528],{"type":51,"tag":85,"props":1529,"children":1530},{},[1531],{"type":57,"value":1532},"\u002F\u002F Create queue\n",{"type":51,"tag":85,"props":1534,"children":1535},{"class":87,"line":315},[1536],{"type":51,"tag":85,"props":1537,"children":1538},{},[1539],{"type":57,"value":1540},"var options = new CreateQueueOptions(\"my-queue\")\n",{"type":51,"tag":85,"props":1542,"children":1543},{"class":87,"line":324},[1544],{"type":51,"tag":85,"props":1545,"children":1546},{},[1547],{"type":57,"value":433},{"type":51,"tag":85,"props":1549,"children":1550},{"class":87,"line":333},[1551],{"type":51,"tag":85,"props":1552,"children":1553},{},[1554],{"type":57,"value":1555},"    MaxDeliveryCount = 10,\n",{"type":51,"tag":85,"props":1557,"children":1558},{"class":87,"line":342},[1559],{"type":51,"tag":85,"props":1560,"children":1561},{},[1562],{"type":57,"value":1563},"    LockDuration = TimeSpan.FromSeconds(30),\n",{"type":51,"tag":85,"props":1565,"children":1566},{"class":87,"line":351},[1567],{"type":51,"tag":85,"props":1568,"children":1569},{},[1570],{"type":57,"value":1571},"    RequiresSession = true,\n",{"type":51,"tag":85,"props":1573,"children":1574},{"class":87,"line":360},[1575],{"type":51,"tag":85,"props":1576,"children":1577},{},[1578],{"type":57,"value":1579},"    DeadLetteringOnMessageExpiration = true\n",{"type":51,"tag":85,"props":1581,"children":1582},{"class":87,"line":369},[1583],{"type":51,"tag":85,"props":1584,"children":1585},{},[1586],{"type":57,"value":1045},{"type":51,"tag":85,"props":1588,"children":1589},{"class":87,"line":588},[1590],{"type":51,"tag":85,"props":1591,"children":1592},{},[1593],{"type":57,"value":1594},"QueueProperties queue = await adminClient.CreateQueueAsync(options);\n",{"type":51,"tag":85,"props":1596,"children":1597},{"class":87,"line":597},[1598],{"type":51,"tag":85,"props":1599,"children":1600},{"emptyLinePlaceholder":291},[1601],{"type":57,"value":294},{"type":51,"tag":85,"props":1603,"children":1604},{"class":87,"line":606},[1605],{"type":51,"tag":85,"props":1606,"children":1607},{},[1608],{"type":57,"value":1609},"\u002F\u002F Update queue\n",{"type":51,"tag":85,"props":1611,"children":1612},{"class":87,"line":614},[1613],{"type":51,"tag":85,"props":1614,"children":1615},{},[1616],{"type":57,"value":1617},"queue.LockDuration = TimeSpan.FromSeconds(60);\n",{"type":51,"tag":85,"props":1619,"children":1620},{"class":87,"line":622},[1621],{"type":51,"tag":85,"props":1622,"children":1623},{},[1624],{"type":57,"value":1625},"await adminClient.UpdateQueueAsync(queue);\n",{"type":51,"tag":85,"props":1627,"children":1628},{"class":87,"line":630},[1629],{"type":51,"tag":85,"props":1630,"children":1631},{"emptyLinePlaceholder":291},[1632],{"type":57,"value":294},{"type":51,"tag":85,"props":1634,"children":1635},{"class":87,"line":1031},[1636],{"type":51,"tag":85,"props":1637,"children":1638},{},[1639],{"type":57,"value":1640},"\u002F\u002F Create topic and subscription\n",{"type":51,"tag":85,"props":1642,"children":1643},{"class":87,"line":1039},[1644],{"type":51,"tag":85,"props":1645,"children":1646},{},[1647],{"type":57,"value":1648},"await adminClient.CreateTopicAsync(new CreateTopicOptions(\"my-topic\"));\n",{"type":51,"tag":85,"props":1650,"children":1651},{"class":87,"line":1048},[1652],{"type":51,"tag":85,"props":1653,"children":1654},{},[1655],{"type":57,"value":1656},"await adminClient.CreateSubscriptionAsync(new CreateSubscriptionOptions(\"my-topic\", \"my-subscription\"));\n",{"type":51,"tag":85,"props":1658,"children":1659},{"class":87,"line":1056},[1660],{"type":51,"tag":85,"props":1661,"children":1662},{"emptyLinePlaceholder":291},[1663],{"type":57,"value":294},{"type":51,"tag":85,"props":1665,"children":1666},{"class":87,"line":1065},[1667],{"type":51,"tag":85,"props":1668,"children":1669},{},[1670],{"type":57,"value":1671},"\u002F\u002F Delete\n",{"type":51,"tag":85,"props":1673,"children":1674},{"class":87,"line":1073},[1675],{"type":51,"tag":85,"props":1676,"children":1677},{},[1678],{"type":57,"value":1679},"await adminClient.DeleteQueueAsync(\"my-queue\");\n",{"type":51,"tag":255,"props":1681,"children":1683},{"id":1682},"_9-cross-entity-transactions",[1684],{"type":57,"value":1685},"9. Cross-Entity Transactions",{"type":51,"tag":73,"props":1687,"children":1689},{"className":263,"code":1688,"language":265,"meta":78,"style":78},"var options = new ServiceBusClientOptions { EnableCrossEntityTransactions = true };\nawait using var client = new ServiceBusClient(connectionString, options);\n\nServiceBusReceiver receiverA = client.CreateReceiver(\"queueA\");\nServiceBusSender senderB = client.CreateSender(\"queueB\");\n\nServiceBusReceivedMessage receivedMessage = await receiverA.ReceiveMessageAsync();\n\nusing (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))\n{\n    await receiverA.CompleteMessageAsync(receivedMessage);\n    await senderB.SendMessageAsync(new ServiceBusMessage(\"Forwarded\"));\n    ts.Complete();\n}\n",[1690],{"type":51,"tag":81,"props":1691,"children":1692},{"__ignoreMap":78},[1693,1701,1709,1716,1724,1732,1739,1747,1754,1762,1769,1777,1785,1793],{"type":51,"tag":85,"props":1694,"children":1695},{"class":87,"line":88},[1696],{"type":51,"tag":85,"props":1697,"children":1698},{},[1699],{"type":57,"value":1700},"var options = new ServiceBusClientOptions { EnableCrossEntityTransactions = true };\n",{"type":51,"tag":85,"props":1702,"children":1703},{"class":87,"line":114},[1704],{"type":51,"tag":85,"props":1705,"children":1706},{},[1707],{"type":57,"value":1708},"await using var client = new ServiceBusClient(connectionString, options);\n",{"type":51,"tag":85,"props":1710,"children":1711},{"class":87,"line":218},[1712],{"type":51,"tag":85,"props":1713,"children":1714},{"emptyLinePlaceholder":291},[1715],{"type":57,"value":294},{"type":51,"tag":85,"props":1717,"children":1718},{"class":87,"line":297},[1719],{"type":51,"tag":85,"props":1720,"children":1721},{},[1722],{"type":57,"value":1723},"ServiceBusReceiver receiverA = client.CreateReceiver(\"queueA\");\n",{"type":51,"tag":85,"props":1725,"children":1726},{"class":87,"line":306},[1727],{"type":51,"tag":85,"props":1728,"children":1729},{},[1730],{"type":57,"value":1731},"ServiceBusSender senderB = client.CreateSender(\"queueB\");\n",{"type":51,"tag":85,"props":1733,"children":1734},{"class":87,"line":315},[1735],{"type":51,"tag":85,"props":1736,"children":1737},{"emptyLinePlaceholder":291},[1738],{"type":57,"value":294},{"type":51,"tag":85,"props":1740,"children":1741},{"class":87,"line":324},[1742],{"type":51,"tag":85,"props":1743,"children":1744},{},[1745],{"type":57,"value":1746},"ServiceBusReceivedMessage receivedMessage = await receiverA.ReceiveMessageAsync();\n",{"type":51,"tag":85,"props":1748,"children":1749},{"class":87,"line":333},[1750],{"type":51,"tag":85,"props":1751,"children":1752},{"emptyLinePlaceholder":291},[1753],{"type":57,"value":294},{"type":51,"tag":85,"props":1755,"children":1756},{"class":87,"line":342},[1757],{"type":51,"tag":85,"props":1758,"children":1759},{},[1760],{"type":57,"value":1761},"using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))\n",{"type":51,"tag":85,"props":1763,"children":1764},{"class":87,"line":351},[1765],{"type":51,"tag":85,"props":1766,"children":1767},{},[1768],{"type":57,"value":433},{"type":51,"tag":85,"props":1770,"children":1771},{"class":87,"line":360},[1772],{"type":51,"tag":85,"props":1773,"children":1774},{},[1775],{"type":57,"value":1776},"    await receiverA.CompleteMessageAsync(receivedMessage);\n",{"type":51,"tag":85,"props":1778,"children":1779},{"class":87,"line":369},[1780],{"type":51,"tag":85,"props":1781,"children":1782},{},[1783],{"type":57,"value":1784},"    await senderB.SendMessageAsync(new ServiceBusMessage(\"Forwarded\"));\n",{"type":51,"tag":85,"props":1786,"children":1787},{"class":87,"line":588},[1788],{"type":51,"tag":85,"props":1789,"children":1790},{},[1791],{"type":57,"value":1792},"    ts.Complete();\n",{"type":51,"tag":85,"props":1794,"children":1795},{"class":87,"line":597},[1796],{"type":51,"tag":85,"props":1797,"children":1798},{},[1799],{"type":57,"value":594},{"type":51,"tag":66,"props":1801,"children":1803},{"id":1802},"key-types-reference",[1804],{"type":57,"value":1805},"Key Types Reference",{"type":51,"tag":1807,"props":1808,"children":1809},"table",{},[1810,1829],{"type":51,"tag":1811,"props":1812,"children":1813},"thead",{},[1814],{"type":51,"tag":1815,"props":1816,"children":1817},"tr",{},[1818,1824],{"type":51,"tag":1819,"props":1820,"children":1821},"th",{},[1822],{"type":57,"value":1823},"Type",{"type":51,"tag":1819,"props":1825,"children":1826},{},[1827],{"type":57,"value":1828},"Purpose",{"type":51,"tag":1830,"props":1831,"children":1832},"tbody",{},[1833,1851,1868,1885,1902,1919,1936,1953,1970,1987],{"type":51,"tag":1815,"props":1834,"children":1835},{},[1836,1846],{"type":51,"tag":1837,"props":1838,"children":1839},"td",{},[1840],{"type":51,"tag":81,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":57,"value":1845},"ServiceBusClient",{"type":51,"tag":1837,"props":1847,"children":1848},{},[1849],{"type":57,"value":1850},"Main entry point, manages connection",{"type":51,"tag":1815,"props":1852,"children":1853},{},[1854,1863],{"type":51,"tag":1837,"props":1855,"children":1856},{},[1857],{"type":51,"tag":81,"props":1858,"children":1860},{"className":1859},[],[1861],{"type":57,"value":1862},"ServiceBusSender",{"type":51,"tag":1837,"props":1864,"children":1865},{},[1866],{"type":57,"value":1867},"Sends messages to queues\u002Ftopics",{"type":51,"tag":1815,"props":1869,"children":1870},{},[1871,1880],{"type":51,"tag":1837,"props":1872,"children":1873},{},[1874],{"type":51,"tag":81,"props":1875,"children":1877},{"className":1876},[],[1878],{"type":57,"value":1879},"ServiceBusReceiver",{"type":51,"tag":1837,"props":1881,"children":1882},{},[1883],{"type":57,"value":1884},"Receives messages from queues\u002Fsubscriptions",{"type":51,"tag":1815,"props":1886,"children":1887},{},[1888,1897],{"type":51,"tag":1837,"props":1889,"children":1890},{},[1891],{"type":51,"tag":81,"props":1892,"children":1894},{"className":1893},[],[1895],{"type":57,"value":1896},"ServiceBusSessionReceiver",{"type":51,"tag":1837,"props":1898,"children":1899},{},[1900],{"type":57,"value":1901},"Receives session messages",{"type":51,"tag":1815,"props":1903,"children":1904},{},[1905,1914],{"type":51,"tag":1837,"props":1906,"children":1907},{},[1908],{"type":51,"tag":81,"props":1909,"children":1911},{"className":1910},[],[1912],{"type":57,"value":1913},"ServiceBusProcessor",{"type":51,"tag":1837,"props":1915,"children":1916},{},[1917],{"type":57,"value":1918},"Background message processing",{"type":51,"tag":1815,"props":1920,"children":1921},{},[1922,1931],{"type":51,"tag":1837,"props":1923,"children":1924},{},[1925],{"type":51,"tag":81,"props":1926,"children":1928},{"className":1927},[],[1929],{"type":57,"value":1930},"ServiceBusSessionProcessor",{"type":51,"tag":1837,"props":1932,"children":1933},{},[1934],{"type":57,"value":1935},"Background session processing",{"type":51,"tag":1815,"props":1937,"children":1938},{},[1939,1948],{"type":51,"tag":1837,"props":1940,"children":1941},{},[1942],{"type":51,"tag":81,"props":1943,"children":1945},{"className":1944},[],[1946],{"type":57,"value":1947},"ServiceBusAdministrationClient",{"type":51,"tag":1837,"props":1949,"children":1950},{},[1951],{"type":57,"value":1952},"CRUD for queues\u002Ftopics\u002Fsubscriptions",{"type":51,"tag":1815,"props":1954,"children":1955},{},[1956,1965],{"type":51,"tag":1837,"props":1957,"children":1958},{},[1959],{"type":51,"tag":81,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":57,"value":1964},"ServiceBusMessage",{"type":51,"tag":1837,"props":1966,"children":1967},{},[1968],{"type":57,"value":1969},"Message to send",{"type":51,"tag":1815,"props":1971,"children":1972},{},[1973,1982],{"type":51,"tag":1837,"props":1974,"children":1975},{},[1976],{"type":51,"tag":81,"props":1977,"children":1979},{"className":1978},[],[1980],{"type":57,"value":1981},"ServiceBusReceivedMessage",{"type":51,"tag":1837,"props":1983,"children":1984},{},[1985],{"type":57,"value":1986},"Received message with metadata",{"type":51,"tag":1815,"props":1988,"children":1989},{},[1990,1999],{"type":51,"tag":1837,"props":1991,"children":1992},{},[1993],{"type":51,"tag":81,"props":1994,"children":1996},{"className":1995},[],[1997],{"type":57,"value":1998},"ServiceBusMessageBatch",{"type":51,"tag":1837,"props":2000,"children":2001},{},[2002],{"type":57,"value":2003},"Batch of messages",{"type":51,"tag":66,"props":2005,"children":2007},{"id":2006},"best-practices",[2008],{"type":57,"value":2009},"Best Practices",{"type":51,"tag":2011,"props":2012,"children":2013},"ol",{},[2014,2025,2049,2059,2069,2079,2103,2118,2135,2145],{"type":51,"tag":2015,"props":2016,"children":2017},"li",{},[2018,2023],{"type":51,"tag":137,"props":2019,"children":2020},{},[2021],{"type":57,"value":2022},"Use singletons",{"type":57,"value":2024}," — Clients, senders, receivers, and processors are thread-safe",{"type":51,"tag":2015,"props":2026,"children":2027},{},[2028,2033,2035,2041,2043],{"type":51,"tag":137,"props":2029,"children":2030},{},[2031],{"type":57,"value":2032},"Always dispose",{"type":57,"value":2034}," — Use ",{"type":51,"tag":81,"props":2036,"children":2038},{"className":2037},[],[2039],{"type":57,"value":2040},"await using",{"type":57,"value":2042}," or call ",{"type":51,"tag":81,"props":2044,"children":2046},{"className":2045},[],[2047],{"type":57,"value":2048},"DisposeAsync()",{"type":51,"tag":2015,"props":2050,"children":2051},{},[2052,2057],{"type":51,"tag":137,"props":2053,"children":2054},{},[2055],{"type":57,"value":2056},"Dispose order",{"type":57,"value":2058}," — Close senders\u002Freceivers\u002Fprocessors first, then client",{"type":51,"tag":2015,"props":2060,"children":2061},{},[2062,2067],{"type":51,"tag":137,"props":2063,"children":2064},{},[2065],{"type":57,"value":2066},"Use DefaultAzureCredential",{"type":57,"value":2068}," — Prefer over connection strings for production",{"type":51,"tag":2015,"props":2070,"children":2071},{},[2072,2077],{"type":51,"tag":137,"props":2073,"children":2074},{},[2075],{"type":57,"value":2076},"Use processors for background work",{"type":57,"value":2078}," — Handles lock renewal automatically",{"type":51,"tag":2015,"props":2080,"children":2081},{},[2082,2087,2089,2095,2097],{"type":51,"tag":137,"props":2083,"children":2084},{},[2085],{"type":57,"value":2086},"Use safe batching",{"type":57,"value":2088}," — ",{"type":51,"tag":81,"props":2090,"children":2092},{"className":2091},[],[2093],{"type":57,"value":2094},"CreateMessageBatchAsync()",{"type":57,"value":2096}," and ",{"type":51,"tag":81,"props":2098,"children":2100},{"className":2099},[],[2101],{"type":57,"value":2102},"TryAddMessage()",{"type":51,"tag":2015,"props":2104,"children":2105},{},[2106,2111,2112],{"type":51,"tag":137,"props":2107,"children":2108},{},[2109],{"type":57,"value":2110},"Handle transient errors",{"type":57,"value":2034},{"type":51,"tag":81,"props":2113,"children":2115},{"className":2114},[],[2116],{"type":57,"value":2117},"ServiceBusException.Reason",{"type":51,"tag":2015,"props":2119,"children":2120},{},[2121,2126,2127,2133],{"type":51,"tag":137,"props":2122,"children":2123},{},[2124],{"type":57,"value":2125},"Configure transport",{"type":57,"value":2034},{"type":51,"tag":81,"props":2128,"children":2130},{"className":2129},[],[2131],{"type":57,"value":2132},"AmqpWebSockets",{"type":57,"value":2134}," if ports 5671\u002F5672 are blocked",{"type":51,"tag":2015,"props":2136,"children":2137},{},[2138,2143],{"type":51,"tag":137,"props":2139,"children":2140},{},[2141],{"type":57,"value":2142},"Set appropriate lock duration",{"type":57,"value":2144}," — Default is 30 seconds",{"type":51,"tag":2015,"props":2146,"children":2147},{},[2148,2153],{"type":51,"tag":137,"props":2149,"children":2150},{},[2151],{"type":57,"value":2152},"Use sessions for ordering",{"type":57,"value":2154}," — FIFO within a session",{"type":51,"tag":66,"props":2156,"children":2158},{"id":2157},"error-handling",[2159],{"type":57,"value":2160},"Error Handling",{"type":51,"tag":73,"props":2162,"children":2164},{"className":263,"code":2163,"language":265,"meta":78,"style":78},"try\n{\n    await sender.SendMessageAsync(message);\n}\ncatch (ServiceBusException ex) when (ex.Reason == ServiceBusFailureReason.ServiceBusy)\n{\n    \u002F\u002F Retry with backoff\n}\ncatch (ServiceBusException ex)\n{\n    Console.WriteLine($\"Service Bus Error: {ex.Reason} - {ex.Message}\");\n}\n",[2165],{"type":51,"tag":81,"props":2166,"children":2167},{"__ignoreMap":78},[2168,2176,2183,2191,2198,2206,2213,2221,2228,2236,2243,2251],{"type":51,"tag":85,"props":2169,"children":2170},{"class":87,"line":88},[2171],{"type":51,"tag":85,"props":2172,"children":2173},{},[2174],{"type":57,"value":2175},"try\n",{"type":51,"tag":85,"props":2177,"children":2178},{"class":87,"line":114},[2179],{"type":51,"tag":85,"props":2180,"children":2181},{},[2182],{"type":57,"value":433},{"type":51,"tag":85,"props":2184,"children":2185},{"class":87,"line":218},[2186],{"type":51,"tag":85,"props":2187,"children":2188},{},[2189],{"type":57,"value":2190},"    await sender.SendMessageAsync(message);\n",{"type":51,"tag":85,"props":2192,"children":2193},{"class":87,"line":297},[2194],{"type":51,"tag":85,"props":2195,"children":2196},{},[2197],{"type":57,"value":594},{"type":51,"tag":85,"props":2199,"children":2200},{"class":87,"line":306},[2201],{"type":51,"tag":85,"props":2202,"children":2203},{},[2204],{"type":57,"value":2205},"catch (ServiceBusException ex) when (ex.Reason == ServiceBusFailureReason.ServiceBusy)\n",{"type":51,"tag":85,"props":2207,"children":2208},{"class":87,"line":315},[2209],{"type":51,"tag":85,"props":2210,"children":2211},{},[2212],{"type":57,"value":433},{"type":51,"tag":85,"props":2214,"children":2215},{"class":87,"line":324},[2216],{"type":51,"tag":85,"props":2217,"children":2218},{},[2219],{"type":57,"value":2220},"    \u002F\u002F Retry with backoff\n",{"type":51,"tag":85,"props":2222,"children":2223},{"class":87,"line":333},[2224],{"type":51,"tag":85,"props":2225,"children":2226},{},[2227],{"type":57,"value":594},{"type":51,"tag":85,"props":2229,"children":2230},{"class":87,"line":342},[2231],{"type":51,"tag":85,"props":2232,"children":2233},{},[2234],{"type":57,"value":2235},"catch (ServiceBusException ex)\n",{"type":51,"tag":85,"props":2237,"children":2238},{"class":87,"line":351},[2239],{"type":51,"tag":85,"props":2240,"children":2241},{},[2242],{"type":57,"value":433},{"type":51,"tag":85,"props":2244,"children":2245},{"class":87,"line":360},[2246],{"type":51,"tag":85,"props":2247,"children":2248},{},[2249],{"type":57,"value":2250},"    Console.WriteLine($\"Service Bus Error: {ex.Reason} - {ex.Message}\");\n",{"type":51,"tag":85,"props":2252,"children":2253},{"class":87,"line":369},[2254],{"type":51,"tag":85,"props":2255,"children":2256},{},[2257],{"type":57,"value":594},{"type":51,"tag":66,"props":2259,"children":2261},{"id":2260},"related-sdks",[2262],{"type":57,"value":2263},"Related SDKs",{"type":51,"tag":1807,"props":2265,"children":2266},{},[2267,2287],{"type":51,"tag":1811,"props":2268,"children":2269},{},[2270],{"type":51,"tag":1815,"props":2271,"children":2272},{},[2273,2278,2282],{"type":51,"tag":1819,"props":2274,"children":2275},{},[2276],{"type":57,"value":2277},"SDK",{"type":51,"tag":1819,"props":2279,"children":2280},{},[2281],{"type":57,"value":1828},{"type":51,"tag":1819,"props":2283,"children":2284},{},[2285],{"type":57,"value":2286},"Install",{"type":51,"tag":1830,"props":2288,"children":2289},{},[2290,2315,2341],{"type":51,"tag":1815,"props":2291,"children":2292},{},[2293,2301,2306],{"type":51,"tag":1837,"props":2294,"children":2295},{},[2296],{"type":51,"tag":81,"props":2297,"children":2299},{"className":2298},[],[2300],{"type":57,"value":46},{"type":51,"tag":1837,"props":2302,"children":2303},{},[2304],{"type":57,"value":2305},"Service Bus (this SDK)",{"type":51,"tag":1837,"props":2307,"children":2308},{},[2309],{"type":51,"tag":81,"props":2310,"children":2312},{"className":2311},[],[2313],{"type":57,"value":2314},"dotnet add package Azure.Messaging.ServiceBus",{"type":51,"tag":1815,"props":2316,"children":2317},{},[2318,2327,2332],{"type":51,"tag":1837,"props":2319,"children":2320},{},[2321],{"type":51,"tag":81,"props":2322,"children":2324},{"className":2323},[],[2325],{"type":57,"value":2326},"Azure.Messaging.EventHubs",{"type":51,"tag":1837,"props":2328,"children":2329},{},[2330],{"type":57,"value":2331},"Event streaming",{"type":51,"tag":1837,"props":2333,"children":2334},{},[2335],{"type":51,"tag":81,"props":2336,"children":2338},{"className":2337},[],[2339],{"type":57,"value":2340},"dotnet add package Azure.Messaging.EventHubs",{"type":51,"tag":1815,"props":2342,"children":2343},{},[2344,2353,2358],{"type":51,"tag":1837,"props":2345,"children":2346},{},[2347],{"type":51,"tag":81,"props":2348,"children":2350},{"className":2349},[],[2351],{"type":57,"value":2352},"Azure.Messaging.EventGrid",{"type":51,"tag":1837,"props":2354,"children":2355},{},[2356],{"type":57,"value":2357},"Event routing",{"type":51,"tag":1837,"props":2359,"children":2360},{},[2361],{"type":51,"tag":81,"props":2362,"children":2364},{"className":2363},[],[2365],{"type":57,"value":2366},"dotnet add package Azure.Messaging.EventGrid",{"type":51,"tag":66,"props":2368,"children":2370},{"id":2369},"reference-links",[2371],{"type":57,"value":2372},"Reference Links",{"type":51,"tag":1807,"props":2374,"children":2375},{},[2376,2392],{"type":51,"tag":1811,"props":2377,"children":2378},{},[2379],{"type":51,"tag":1815,"props":2380,"children":2381},{},[2382,2387],{"type":51,"tag":1819,"props":2383,"children":2384},{},[2385],{"type":57,"value":2386},"Resource",{"type":51,"tag":1819,"props":2388,"children":2389},{},[2390],{"type":57,"value":2391},"URL",{"type":51,"tag":1830,"props":2393,"children":2394},{},[2395,2414,2431,2448],{"type":51,"tag":1815,"props":2396,"children":2397},{},[2398,2403],{"type":51,"tag":1837,"props":2399,"children":2400},{},[2401],{"type":57,"value":2402},"NuGet Package",{"type":51,"tag":1837,"props":2404,"children":2405},{},[2406],{"type":51,"tag":2407,"props":2408,"children":2412},"a",{"href":2409,"rel":2410},"https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.Messaging.ServiceBus",[2411],"nofollow",[2413],{"type":57,"value":2409},{"type":51,"tag":1815,"props":2415,"children":2416},{},[2417,2422],{"type":51,"tag":1837,"props":2418,"children":2419},{},[2420],{"type":57,"value":2421},"API Reference",{"type":51,"tag":1837,"props":2423,"children":2424},{},[2425],{"type":51,"tag":2407,"props":2426,"children":2429},{"href":2427,"rel":2428},"https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fazure.messaging.servicebus",[2411],[2430],{"type":57,"value":2427},{"type":51,"tag":1815,"props":2432,"children":2433},{},[2434,2439],{"type":51,"tag":1837,"props":2435,"children":2436},{},[2437],{"type":57,"value":2438},"GitHub Source",{"type":51,"tag":1837,"props":2440,"children":2441},{},[2442],{"type":51,"tag":2407,"props":2443,"children":2446},{"href":2444,"rel":2445},"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fservicebus\u002FAzure.Messaging.ServiceBus",[2411],[2447],{"type":57,"value":2444},{"type":51,"tag":1815,"props":2449,"children":2450},{},[2451,2456],{"type":51,"tag":1837,"props":2452,"children":2453},{},[2454],{"type":57,"value":2455},"Troubleshooting",{"type":51,"tag":1837,"props":2457,"children":2458},{},[2459],{"type":51,"tag":2407,"props":2460,"children":2463},{"href":2461,"rel":2462},"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fservicebus\u002FAzure.Messaging.ServiceBus\u002FTROUBLESHOOTING.md",[2411],[2464],{"type":57,"value":2461},{"type":51,"tag":2466,"props":2467,"children":2468},"style",{},[2469],{"type":57,"value":2470},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2472,"total":2579},[2473,2487,2508,2523,2540,2551,2564],{"slug":2474,"name":2474,"fn":2475,"description":2476,"org":2477,"tags":2478,"stars":25,"repoUrl":26,"updatedAt":2486},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2479,2480,2482,2483],{"name":20,"slug":21,"type":15},{"name":2481,"slug":32,"type":15},"Agents",{"name":13,"slug":14,"type":15},{"name":2484,"slug":2485,"type":15},"LLM","llm","2026-07-03T16:32:10.297433",{"slug":2488,"name":2488,"fn":2489,"description":2490,"org":2491,"tags":2492,"stars":25,"repoUrl":26,"updatedAt":2507},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2493,2496,2497,2500,2503,2504],{"name":2494,"slug":2495,"type":15},"Analytics","analytics",{"name":13,"slug":14,"type":15},{"name":2498,"slug":2499,"type":15},"Data Analysis","data-analysis",{"name":2501,"slug":2502,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":2505,"slug":2506,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":2509,"name":2509,"fn":2510,"description":2511,"org":2512,"tags":2513,"stars":25,"repoUrl":26,"updatedAt":2522},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2514,2517,2518,2519],{"name":2515,"slug":2516,"type":15},"AI Infrastructure","ai-infrastructure",{"name":13,"slug":14,"type":15},{"name":2501,"slug":2502,"type":15},{"name":2520,"slug":2521,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":2524,"name":2524,"fn":2525,"description":2526,"org":2527,"tags":2528,"stars":25,"repoUrl":26,"updatedAt":2539},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2529,2530,2533,2534,2535,2538],{"name":13,"slug":14,"type":15},{"name":2531,"slug":2532,"type":15},"Compliance","compliance",{"name":2484,"slug":2485,"type":15},{"name":9,"slug":8,"type":15},{"name":2536,"slug":2537,"type":15},"Python","python",{"name":2520,"slug":2521,"type":15},"2026-07-18T05:14:23.017504",{"slug":2541,"name":2541,"fn":2542,"description":2543,"org":2544,"tags":2545,"stars":25,"repoUrl":26,"updatedAt":2550},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2546,2547,2548,2549],{"name":2494,"slug":2495,"type":15},{"name":13,"slug":14,"type":15},{"name":2484,"slug":2485,"type":15},{"name":2536,"slug":2537,"type":15},"2026-07-31T05:54:29.068751",{"slug":2552,"name":2552,"fn":2553,"description":2554,"org":2555,"tags":2556,"stars":25,"repoUrl":26,"updatedAt":2563},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2557,2560,2561,2562],{"name":2558,"slug":2559,"type":15},"API Development","api-development",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":2536,"slug":2537,"type":15},"2026-07-18T05:14:16.988376",{"slug":2565,"name":2565,"fn":2566,"description":2567,"org":2568,"tags":2569,"stars":25,"repoUrl":26,"updatedAt":2578},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2570,2571,2574,2577],{"name":13,"slug":14,"type":15},{"name":2572,"slug":2573,"type":15},"Computer Vision","computer-vision",{"name":2575,"slug":2576,"type":15},"Images","images",{"name":2536,"slug":2537,"type":15},"2026-07-18T05:14:18.007737",38,{"items":2581,"total":2716},[2582,2604,2611,2620,2627,2636,2643,2650,2657,2672,2691,2704],{"slug":2583,"name":2583,"fn":2584,"description":2585,"org":2586,"tags":2587,"stars":2601,"repoUrl":2602,"updatedAt":2603},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2588,2591,2594,2595,2598],{"name":2589,"slug":2590,"type":15},"Engineering","engineering",{"name":2592,"slug":2593,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":2596,"slug":2597,"type":15},"Project Management","project-management",{"name":2599,"slug":2600,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":2474,"name":2474,"fn":2475,"description":2476,"org":2605,"tags":2606,"stars":25,"repoUrl":26,"updatedAt":2486},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2607,2608,2609,2610],{"name":20,"slug":21,"type":15},{"name":2481,"slug":32,"type":15},{"name":13,"slug":14,"type":15},{"name":2484,"slug":2485,"type":15},{"slug":2488,"name":2488,"fn":2489,"description":2490,"org":2612,"tags":2613,"stars":25,"repoUrl":26,"updatedAt":2507},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2614,2615,2616,2617,2618,2619],{"name":2494,"slug":2495,"type":15},{"name":13,"slug":14,"type":15},{"name":2498,"slug":2499,"type":15},{"name":2501,"slug":2502,"type":15},{"name":9,"slug":8,"type":15},{"name":2505,"slug":2506,"type":15},{"slug":2509,"name":2509,"fn":2510,"description":2511,"org":2621,"tags":2622,"stars":25,"repoUrl":26,"updatedAt":2522},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2623,2624,2625,2626],{"name":2515,"slug":2516,"type":15},{"name":13,"slug":14,"type":15},{"name":2501,"slug":2502,"type":15},{"name":2520,"slug":2521,"type":15},{"slug":2524,"name":2524,"fn":2525,"description":2526,"org":2628,"tags":2629,"stars":25,"repoUrl":26,"updatedAt":2539},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2630,2631,2632,2633,2634,2635],{"name":13,"slug":14,"type":15},{"name":2531,"slug":2532,"type":15},{"name":2484,"slug":2485,"type":15},{"name":9,"slug":8,"type":15},{"name":2536,"slug":2537,"type":15},{"name":2520,"slug":2521,"type":15},{"slug":2541,"name":2541,"fn":2542,"description":2543,"org":2637,"tags":2638,"stars":25,"repoUrl":26,"updatedAt":2550},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2639,2640,2641,2642],{"name":2494,"slug":2495,"type":15},{"name":13,"slug":14,"type":15},{"name":2484,"slug":2485,"type":15},{"name":2536,"slug":2537,"type":15},{"slug":2552,"name":2552,"fn":2553,"description":2554,"org":2644,"tags":2645,"stars":25,"repoUrl":26,"updatedAt":2563},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2646,2647,2648,2649],{"name":2558,"slug":2559,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":2536,"slug":2537,"type":15},{"slug":2565,"name":2565,"fn":2566,"description":2567,"org":2651,"tags":2652,"stars":25,"repoUrl":26,"updatedAt":2578},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2653,2654,2655,2656],{"name":13,"slug":14,"type":15},{"name":2572,"slug":2573,"type":15},{"name":2575,"slug":2576,"type":15},{"name":2536,"slug":2537,"type":15},{"slug":2658,"name":2658,"fn":2659,"description":2660,"org":2661,"tags":2662,"stars":25,"repoUrl":26,"updatedAt":2671},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2663,2664,2667,2670],{"name":13,"slug":14,"type":15},{"name":2665,"slug":2666,"type":15},"Configuration","configuration",{"name":2668,"slug":2669,"type":15},"Feature Flags","feature-flags",{"name":2501,"slug":2502,"type":15},"2026-07-03T16:32:01.278468",{"slug":2673,"name":2673,"fn":2674,"description":2675,"org":2676,"tags":2677,"stars":25,"repoUrl":26,"updatedAt":2690},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2678,2681,2684,2687],{"name":2679,"slug":2680,"type":15},"Cosmos DB","cosmos-db",{"name":2682,"slug":2683,"type":15},"Database","database",{"name":2685,"slug":2686,"type":15},"NoSQL","nosql",{"name":2688,"slug":2689,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":2692,"name":2692,"fn":2674,"description":2693,"org":2694,"tags":2695,"stars":25,"repoUrl":26,"updatedAt":2703},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2696,2697,2698,2699,2700],{"name":2679,"slug":2680,"type":15},{"name":2682,"slug":2683,"type":15},{"name":9,"slug":8,"type":15},{"name":2685,"slug":2686,"type":15},{"name":2701,"slug":2702,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":2705,"name":2705,"fn":2706,"description":2707,"org":2708,"tags":2709,"stars":25,"repoUrl":26,"updatedAt":2715},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2710,2711,2712,2713,2714],{"name":13,"slug":14,"type":15},{"name":2679,"slug":2680,"type":15},{"name":2682,"slug":2683,"type":15},{"name":2501,"slug":2502,"type":15},{"name":2685,"slug":2686,"type":15},"2026-05-13T06:14:17.582229",267]