[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-azure-eventhub-dotnet":3,"mdc-6whzg8-key":42,"related-repo-microsoft-azure-eventhub-dotnet":2946,"related-org-microsoft-azure-eventhub-dotnet":3054},{"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-eventhub-dotnet","implement event streaming with Azure Event Hubs","Azure Event Hubs SDK for .NET. Use for high-throughput event streaming: sending events (EventHubProducerClient, EventHubBufferedProducerClient), receiving events (EventProcessorClient with checkpointing), partition management, and real-time data ingestion. Triggers: \"Event Hubs\", \"event streaming\", \"EventHubProducerClient\", \"EventProcessorClient\", \"send events\", \"receive events\", \"checkpointing\", \"partition\".\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},"Data Engineering","data-engineering",{"name":20,"slug":21,"type":15},".NET","net",{"name":23,"slug":24,"type":15},"Event Hubs","event-hubs",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-05-13T06:14:22.808717","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-eventhub-dotnet","---\nname: azure-eventhub-dotnet\ndescription: |\n  Azure Event Hubs SDK for .NET. Use for high-throughput event streaming: sending events (EventHubProducerClient, EventHubBufferedProducerClient), receiving events (EventProcessorClient with checkpointing), partition management, and real-time data ingestion. Triggers: \"Event Hubs\", \"event streaming\", \"EventHubProducerClient\", \"EventProcessorClient\", \"send events\", \"receive events\", \"checkpointing\", \"partition\".\nlicense: MIT\nmetadata:\n  author: Microsoft\n  version: \"1.0.0\"\n  package: Azure.Messaging.EventHubs\n---\n\n# Azure.Messaging.EventHubs (.NET)\n\nHigh-throughput event streaming SDK for sending and receiving events via Azure Event Hubs.\n\n## Installation\n\n```bash\n# Core package (sending and simple receiving)\ndotnet add package Azure.Messaging.EventHubs\n\n# Processor package (production receiving with checkpointing)\ndotnet add package Azure.Messaging.EventHubs.Processor\n\n# Authentication\ndotnet add package Azure.Identity\n\n# For checkpointing (required by EventProcessorClient)\ndotnet add package Azure.Storage.Blobs\n```\n\n**Current Versions**: Azure.Messaging.EventHubs v5.12.2, Azure.Messaging.EventHubs.Processor v5.12.2\n\n## Environment Variables\n\n```bash\nEVENTHUB_FULLY_QUALIFIED_NAMESPACE=\u003Cnamespace>.servicebus.windows.net  # Required: Event Hubs fully qualified namespace\nEVENTHUB_NAME=\u003Cevent-hub-name>  # Required: Event Hub name\nBLOB_STORAGE_CONNECTION_STRING=\u003Cstorage-connection-string>  # Alternative to Entra ID auth\nBLOB_CONTAINER_NAME=\u003Ccheckpoint-container>  # Required: checkpoint container name\nEVENTHUB_CONNECTION_STRING=Endpoint=sb:\u002F\u002F\u003Cnamespace>.servicebus.windows.net\u002F;SharedAccessKeyName=...  # Alternative to Entra ID auth\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.Messaging.EventHubs;\nusing Azure.Messaging.EventHubs.Producer;\n\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();\n\nvar fullyQualifiedNamespace = Environment.GetEnvironmentVariable(\"EVENTHUB_FULLY_QUALIFIED_NAMESPACE\");\nvar eventHubName = Environment.GetEnvironmentVariable(\"EVENTHUB_NAME\");\n\nvar producer = new EventHubProducerClient(\n    fullyQualifiedNamespace,\n    eventHubName,\n    credential);\n```\n\n**Required RBAC Roles**:\n- **Sending**: `Azure Event Hubs Data Sender`\n- **Receiving**: `Azure Event Hubs Data Receiver`\n- **Both**: `Azure Event Hubs Data Owner`\n\n## Client Types\n\n| Client | Purpose | When to Use |\n|--------|---------|-------------|\n| `EventHubProducerClient` | Send events immediately in batches | Real-time sending, full control over batching |\n| `EventHubBufferedProducerClient` | Automatic batching with background sending | High-volume, fire-and-forget scenarios |\n| `EventHubConsumerClient` | Simple event reading | Prototyping only, NOT for production |\n| `EventProcessorClient` | Production event processing | **Always use this for receiving in production** |\n\n## Core Workflow\n\n### 1. Send Events (Batch)\n\n```csharp\nusing Azure.Identity;\nusing Azure.Messaging.EventHubs;\nusing Azure.Messaging.EventHubs.Producer;\n\nawait using var producer = new EventHubProducerClient(\n    fullyQualifiedNamespace,\n    eventHubName,\n    new DefaultAzureCredential());\n\n\u002F\u002F Create a batch (respects size limits automatically)\nusing EventDataBatch batch = await producer.CreateBatchAsync();\n\n\u002F\u002F Add events to batch\nvar events = new[]\n{\n    new EventData(BinaryData.FromString(\"{\\\"id\\\": 1, \\\"message\\\": \\\"Hello\\\"}\")),\n    new EventData(BinaryData.FromString(\"{\\\"id\\\": 2, \\\"message\\\": \\\"World\\\"}\"))\n};\n\nforeach (var eventData in events)\n{\n    if (!batch.TryAdd(eventData))\n    {\n        \u002F\u002F Batch is full - send it and create a new one\n        await producer.SendAsync(batch);\n        batch = await producer.CreateBatchAsync();\n        \n        if (!batch.TryAdd(eventData))\n        {\n            throw new Exception(\"Event too large for empty batch\");\n        }\n    }\n}\n\n\u002F\u002F Send remaining events\nif (batch.Count > 0)\n{\n    await producer.SendAsync(batch);\n}\n```\n\n### 2. Send Events (Buffered - High Volume)\n\n```csharp\nusing Azure.Messaging.EventHubs.Producer;\n\nvar options = new EventHubBufferedProducerClientOptions\n{\n    MaximumWaitTime = TimeSpan.FromSeconds(1)\n};\n\nawait using var producer = new EventHubBufferedProducerClient(\n    fullyQualifiedNamespace,\n    eventHubName,\n    new DefaultAzureCredential(),\n    options);\n\n\u002F\u002F Handle send success\u002Ffailure\nproducer.SendEventBatchSucceededAsync += args =>\n{\n    Console.WriteLine($\"Batch sent: {args.EventBatch.Count} events\");\n    return Task.CompletedTask;\n};\n\nproducer.SendEventBatchFailedAsync += args =>\n{\n    Console.WriteLine($\"Batch failed: {args.Exception.Message}\");\n    return Task.CompletedTask;\n};\n\n\u002F\u002F Enqueue events (sent automatically in background)\nfor (int i = 0; i \u003C 1000; i++)\n{\n    await producer.EnqueueEventAsync(new EventData($\"Event {i}\"));\n}\n\n\u002F\u002F Flush remaining events before disposing\nawait producer.FlushAsync();\n```\n\n### 3. Receive Events (Production - EventProcessorClient)\n\n```csharp\nusing Azure.Identity;\nusing Azure.Messaging.EventHubs;\nusing Azure.Messaging.EventHubs.Consumer;\nusing Azure.Messaging.EventHubs.Processor;\nusing Azure.Storage.Blobs;\n\n\u002F\u002F Blob container for checkpointing\nvar blobClient = new BlobContainerClient(\n    Environment.GetEnvironmentVariable(\"BLOB_STORAGE_CONNECTION_STRING\"),\n    Environment.GetEnvironmentVariable(\"BLOB_CONTAINER_NAME\"));\n\nawait blobClient.CreateIfNotExistsAsync();\n\n\u002F\u002F Create processor\nvar processor = new EventProcessorClient(\n    blobClient,\n    EventHubConsumerClient.DefaultConsumerGroup,\n    fullyQualifiedNamespace,\n    eventHubName,\n    new DefaultAzureCredential());\n\n\u002F\u002F Handle events\nprocessor.ProcessEventAsync += async args =>\n{\n    Console.WriteLine($\"Partition: {args.Partition.PartitionId}\");\n    Console.WriteLine($\"Data: {args.Data.EventBody}\");\n    \n    \u002F\u002F Checkpoint after processing (or batch checkpoints)\n    await args.UpdateCheckpointAsync();\n};\n\n\u002F\u002F Handle errors\nprocessor.ProcessErrorAsync += args =>\n{\n    Console.WriteLine($\"Error: {args.Exception.Message}\");\n    Console.WriteLine($\"Partition: {args.PartitionId}\");\n    return Task.CompletedTask;\n};\n\n\u002F\u002F Start processing\nawait processor.StartProcessingAsync();\n\n\u002F\u002F Run until cancelled\nawait Task.Delay(Timeout.Infinite, cancellationToken);\n\n\u002F\u002F Stop gracefully\nawait processor.StopProcessingAsync();\n```\n\n### 4. Partition Operations\n\n```csharp\n\u002F\u002F Get partition IDs\nstring[] partitionIds = await producer.GetPartitionIdsAsync();\n\n\u002F\u002F Send to specific partition (use sparingly)\nvar options = new SendEventOptions\n{\n    PartitionId = \"0\"\n};\nawait producer.SendAsync(events, options);\n\n\u002F\u002F Use partition key (recommended for ordering)\nvar batchOptions = new CreateBatchOptions\n{\n    PartitionKey = \"customer-123\"  \u002F\u002F Events with same key go to same partition\n};\nusing var batch = await producer.CreateBatchAsync(batchOptions);\n```\n\n## EventPosition Options\n\nControl where to start reading:\n\n```csharp\n\u002F\u002F Start from beginning\nEventPosition.Earliest\n\n\u002F\u002F Start from end (new events only)\nEventPosition.Latest\n\n\u002F\u002F Start from specific offset\nEventPosition.FromOffset(12345)\n\n\u002F\u002F Start from specific sequence number\nEventPosition.FromSequenceNumber(100)\n\n\u002F\u002F Start from specific time\nEventPosition.FromEnqueuedTime(DateTimeOffset.UtcNow.AddHours(-1))\n```\n\n## ASP.NET Core Integration\n\n```csharp\n\u002F\u002F Program.cs\nusing Azure.Identity;\nusing Azure.Messaging.EventHubs.Producer;\nusing Microsoft.Extensions.Azure;\n\nbuilder.Services.AddAzureClients(clientBuilder =>\n{\n    clientBuilder.AddEventHubProducerClient(\n        builder.Configuration[\"EventHub:FullyQualifiedNamespace\"],\n        builder.Configuration[\"EventHub:Name\"]);\n    \n    clientBuilder.UseCredential(new DefaultAzureCredential());\n});\n\n\u002F\u002F Inject in controller\u002Fservice\npublic class EventService\n{\n    private readonly EventHubProducerClient _producer;\n    \n    public EventService(EventHubProducerClient producer)\n    {\n        _producer = producer;\n    }\n    \n    public async Task SendAsync(string message)\n    {\n        using var batch = await _producer.CreateBatchAsync();\n        batch.TryAdd(new EventData(message));\n        await _producer.SendAsync(batch);\n    }\n}\n```\n\n## Best Practices\n\n1. **Use `EventProcessorClient` for receiving** — Never use `EventHubConsumerClient` in production\n2. **Checkpoint strategically** — After N events or time interval, not every event\n3. **Use partition keys** — For ordering guarantees within a partition\n4. **Reuse clients** — Create once, use as singleton (thread-safe)\n5. **Use `await using`** — Ensures proper disposal\n6. **Handle `ProcessErrorAsync`** — Always register error handler\n7. **Batch events** — Use `CreateBatchAsync()` to respect size limits\n8. **Use buffered producer** — For high-volume scenarios with automatic batching\n\n## Error Handling\n\n```csharp\nusing Azure.Messaging.EventHubs;\n\ntry\n{\n    await producer.SendAsync(batch);\n}\ncatch (EventHubsException ex) when (ex.Reason == EventHubsException.FailureReason.ServiceBusy)\n{\n    \u002F\u002F Retry with backoff\n    await Task.Delay(TimeSpan.FromSeconds(5));\n}\ncatch (EventHubsException ex) when (ex.IsTransient)\n{\n    \u002F\u002F Transient error - safe to retry\n    Console.WriteLine($\"Transient error: {ex.Message}\");\n}\ncatch (EventHubsException ex)\n{\n    \u002F\u002F Non-transient error\n    Console.WriteLine($\"Error: {ex.Reason} - {ex.Message}\");\n}\n```\n\n## Checkpointing Strategies\n\n| Strategy | When to Use |\n|----------|-------------|\n| Every event | Low volume, critical data |\n| Every N events | Balanced throughput\u002Freliability |\n| Time-based | Consistent checkpoint intervals |\n| Batch completion | After processing a logical batch |\n\n```csharp\n\u002F\u002F Checkpoint every 100 events\nprivate int _eventCount = 0;\n\nprocessor.ProcessEventAsync += async args =>\n{\n    \u002F\u002F Process event...\n    \n    _eventCount++;\n    if (_eventCount >= 100)\n    {\n        await args.UpdateCheckpointAsync();\n        _eventCount = 0;\n    }\n};\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.Messaging.EventHubs` | Core sending\u002Freceiving | `dotnet add package Azure.Messaging.EventHubs` |\n| `Azure.Messaging.EventHubs.Processor` | Production processing | `dotnet add package Azure.Messaging.EventHubs.Processor` |\n| `Azure.ResourceManager.EventHubs` | Management plane (create hubs) | `dotnet add package Azure.ResourceManager.EventHubs` |\n| `Microsoft.Azure.WebJobs.Extensions.EventHubs` | Azure Functions binding | `dotnet add package Microsoft.Azure.WebJobs.Extensions.EventHubs` |\n",{"data":43,"body":47},{"name":4,"description":6,"license":28,"metadata":44},{"author":9,"version":45,"package":46},"1.0.0","Azure.Messaging.EventHubs",{"type":48,"children":49},"root",[50,59,65,72,238,249,255,465,471,637,647,698,704,828,834,841,1167,1173,1434,1440,1813,1819,1948,1954,1959,2074,2080,2321,2327,2444,2450,2614,2620,2693,2805,2811,2940],{"type":51,"tag":52,"props":53,"children":55},"element","h1",{"id":54},"azuremessagingeventhubs-net",[56],{"type":57,"value":58},"text","Azure.Messaging.EventHubs (.NET)",{"type":51,"tag":60,"props":61,"children":62},"p",{},[63],{"type":57,"value":64},"High-throughput event streaming SDK for sending and receiving events via Azure Event Hubs.",{"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","# Core package (sending and simple receiving)\ndotnet add package Azure.Messaging.EventHubs\n\n# Processor package (production receiving with checkpointing)\ndotnet add package Azure.Messaging.EventHubs.Processor\n\n# Authentication\ndotnet add package Azure.Identity\n\n# For checkpointing (required by EventProcessorClient)\ndotnet add package Azure.Storage.Blobs\n","bash","",[80],{"type":51,"tag":81,"props":82,"children":83},"code",{"__ignoreMap":78},[84,96,122,132,141,162,170,179,200,208,217],{"type":51,"tag":85,"props":86,"children":89},"span",{"class":87,"line":88},"line",1,[90],{"type":51,"tag":85,"props":91,"children":93},{"style":92},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[94],{"type":57,"value":95},"# Core package (sending and simple receiving)\n",{"type":51,"tag":85,"props":97,"children":99},{"class":87,"line":98},2,[100,106,112,117],{"type":51,"tag":85,"props":101,"children":103},{"style":102},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[104],{"type":57,"value":105},"dotnet",{"type":51,"tag":85,"props":107,"children":109},{"style":108},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[110],{"type":57,"value":111}," add",{"type":51,"tag":85,"props":113,"children":114},{"style":108},[115],{"type":57,"value":116}," package",{"type":51,"tag":85,"props":118,"children":119},{"style":108},[120],{"type":57,"value":121}," Azure.Messaging.EventHubs\n",{"type":51,"tag":85,"props":123,"children":125},{"class":87,"line":124},3,[126],{"type":51,"tag":85,"props":127,"children":129},{"emptyLinePlaceholder":128},true,[130],{"type":57,"value":131},"\n",{"type":51,"tag":85,"props":133,"children":135},{"class":87,"line":134},4,[136],{"type":51,"tag":85,"props":137,"children":138},{"style":92},[139],{"type":57,"value":140},"# Processor package (production receiving with checkpointing)\n",{"type":51,"tag":85,"props":142,"children":144},{"class":87,"line":143},5,[145,149,153,157],{"type":51,"tag":85,"props":146,"children":147},{"style":102},[148],{"type":57,"value":105},{"type":51,"tag":85,"props":150,"children":151},{"style":108},[152],{"type":57,"value":111},{"type":51,"tag":85,"props":154,"children":155},{"style":108},[156],{"type":57,"value":116},{"type":51,"tag":85,"props":158,"children":159},{"style":108},[160],{"type":57,"value":161}," Azure.Messaging.EventHubs.Processor\n",{"type":51,"tag":85,"props":163,"children":165},{"class":87,"line":164},6,[166],{"type":51,"tag":85,"props":167,"children":168},{"emptyLinePlaceholder":128},[169],{"type":57,"value":131},{"type":51,"tag":85,"props":171,"children":173},{"class":87,"line":172},7,[174],{"type":51,"tag":85,"props":175,"children":176},{"style":92},[177],{"type":57,"value":178},"# Authentication\n",{"type":51,"tag":85,"props":180,"children":182},{"class":87,"line":181},8,[183,187,191,195],{"type":51,"tag":85,"props":184,"children":185},{"style":102},[186],{"type":57,"value":105},{"type":51,"tag":85,"props":188,"children":189},{"style":108},[190],{"type":57,"value":111},{"type":51,"tag":85,"props":192,"children":193},{"style":108},[194],{"type":57,"value":116},{"type":51,"tag":85,"props":196,"children":197},{"style":108},[198],{"type":57,"value":199}," Azure.Identity\n",{"type":51,"tag":85,"props":201,"children":203},{"class":87,"line":202},9,[204],{"type":51,"tag":85,"props":205,"children":206},{"emptyLinePlaceholder":128},[207],{"type":57,"value":131},{"type":51,"tag":85,"props":209,"children":211},{"class":87,"line":210},10,[212],{"type":51,"tag":85,"props":213,"children":214},{"style":92},[215],{"type":57,"value":216},"# For checkpointing (required by EventProcessorClient)\n",{"type":51,"tag":85,"props":218,"children":220},{"class":87,"line":219},11,[221,225,229,233],{"type":51,"tag":85,"props":222,"children":223},{"style":102},[224],{"type":57,"value":105},{"type":51,"tag":85,"props":226,"children":227},{"style":108},[228],{"type":57,"value":111},{"type":51,"tag":85,"props":230,"children":231},{"style":108},[232],{"type":57,"value":116},{"type":51,"tag":85,"props":234,"children":235},{"style":108},[236],{"type":57,"value":237}," Azure.Storage.Blobs\n",{"type":51,"tag":60,"props":239,"children":240},{},[241,247],{"type":51,"tag":242,"props":243,"children":244},"strong",{},[245],{"type":57,"value":246},"Current Versions",{"type":57,"value":248},": Azure.Messaging.EventHubs v5.12.2, Azure.Messaging.EventHubs.Processor v5.12.2",{"type":51,"tag":66,"props":250,"children":252},{"id":251},"environment-variables",[253],{"type":57,"value":254},"Environment Variables",{"type":51,"tag":73,"props":256,"children":258},{"className":75,"code":257,"language":77,"meta":78,"style":78},"EVENTHUB_FULLY_QUALIFIED_NAMESPACE=\u003Cnamespace>.servicebus.windows.net  # Required: Event Hubs fully qualified namespace\nEVENTHUB_NAME=\u003Cevent-hub-name>  # Required: Event Hub name\nBLOB_STORAGE_CONNECTION_STRING=\u003Cstorage-connection-string>  # Alternative to Entra ID auth\nBLOB_CONTAINER_NAME=\u003Ccheckpoint-container>  # Required: checkpoint container name\nEVENTHUB_CONNECTION_STRING=Endpoint=sb:\u002F\u002F\u003Cnamespace>.servicebus.windows.net\u002F;SharedAccessKeyName=...  # Alternative to Entra ID auth\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\n",[259],{"type":51,"tag":81,"props":260,"children":261},{"__ignoreMap":78},[262,297,323,349,375,443],{"type":51,"tag":85,"props":263,"children":264},{"class":87,"line":88},[265,271,277,282,287,292],{"type":51,"tag":85,"props":266,"children":268},{"style":267},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[269],{"type":57,"value":270},"EVENTHUB_FULLY_QUALIFIED_NAMESPACE",{"type":51,"tag":85,"props":272,"children":274},{"style":273},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[275],{"type":57,"value":276},"=\u003C",{"type":51,"tag":85,"props":278,"children":279},{"style":108},[280],{"type":57,"value":281},"namespace",{"type":51,"tag":85,"props":283,"children":284},{"style":273},[285],{"type":57,"value":286},">",{"type":51,"tag":85,"props":288,"children":289},{"style":108},[290],{"type":57,"value":291},".servicebus.windows.net",{"type":51,"tag":85,"props":293,"children":294},{"style":92},[295],{"type":57,"value":296},"  # Required: Event Hubs fully qualified namespace\n",{"type":51,"tag":85,"props":298,"children":299},{"class":87,"line":98},[300,305,309,314,318],{"type":51,"tag":85,"props":301,"children":302},{"style":267},[303],{"type":57,"value":304},"EVENTHUB_NAME",{"type":51,"tag":85,"props":306,"children":307},{"style":273},[308],{"type":57,"value":276},{"type":51,"tag":85,"props":310,"children":311},{"style":108},[312],{"type":57,"value":313},"event-hub-name",{"type":51,"tag":85,"props":315,"children":316},{"style":273},[317],{"type":57,"value":286},{"type":51,"tag":85,"props":319,"children":320},{"style":92},[321],{"type":57,"value":322},"  # Required: Event Hub name\n",{"type":51,"tag":85,"props":324,"children":325},{"class":87,"line":124},[326,331,335,340,344],{"type":51,"tag":85,"props":327,"children":328},{"style":267},[329],{"type":57,"value":330},"BLOB_STORAGE_CONNECTION_STRING",{"type":51,"tag":85,"props":332,"children":333},{"style":273},[334],{"type":57,"value":276},{"type":51,"tag":85,"props":336,"children":337},{"style":108},[338],{"type":57,"value":339},"storage-connection-string",{"type":51,"tag":85,"props":341,"children":342},{"style":273},[343],{"type":57,"value":286},{"type":51,"tag":85,"props":345,"children":346},{"style":92},[347],{"type":57,"value":348},"  # Alternative to Entra ID auth\n",{"type":51,"tag":85,"props":350,"children":351},{"class":87,"line":134},[352,357,361,366,370],{"type":51,"tag":85,"props":353,"children":354},{"style":267},[355],{"type":57,"value":356},"BLOB_CONTAINER_NAME",{"type":51,"tag":85,"props":358,"children":359},{"style":273},[360],{"type":57,"value":276},{"type":51,"tag":85,"props":362,"children":363},{"style":108},[364],{"type":57,"value":365},"checkpoint-container",{"type":51,"tag":85,"props":367,"children":368},{"style":273},[369],{"type":57,"value":286},{"type":51,"tag":85,"props":371,"children":372},{"style":92},[373],{"type":57,"value":374},"  # Required: checkpoint container name\n",{"type":51,"tag":85,"props":376,"children":377},{"class":87,"line":143},[378,383,388,393,397,402,407,411,415,420,425,430,434,439],{"type":51,"tag":85,"props":379,"children":380},{"style":267},[381],{"type":57,"value":382},"EVENTHUB_CONNECTION_STRING",{"type":51,"tag":85,"props":384,"children":385},{"style":273},[386],{"type":57,"value":387},"=",{"type":51,"tag":85,"props":389,"children":390},{"style":267},[391],{"type":57,"value":392},"Endpoint",{"type":51,"tag":85,"props":394,"children":395},{"style":273},[396],{"type":57,"value":387},{"type":51,"tag":85,"props":398,"children":399},{"style":108},[400],{"type":57,"value":401},"sb:\u002F\u002F",{"type":51,"tag":85,"props":403,"children":404},{"style":273},[405],{"type":57,"value":406},"\u003C",{"type":51,"tag":85,"props":408,"children":409},{"style":108},[410],{"type":57,"value":281},{"type":51,"tag":85,"props":412,"children":413},{"style":273},[414],{"type":57,"value":286},{"type":51,"tag":85,"props":416,"children":417},{"style":108},[418],{"type":57,"value":419},".servicebus.windows.net\u002F",{"type":51,"tag":85,"props":421,"children":422},{"style":273},[423],{"type":57,"value":424},";",{"type":51,"tag":85,"props":426,"children":427},{"style":267},[428],{"type":57,"value":429},"SharedAccessKeyName",{"type":51,"tag":85,"props":431,"children":432},{"style":273},[433],{"type":57,"value":387},{"type":51,"tag":85,"props":435,"children":436},{"style":108},[437],{"type":57,"value":438},"...",{"type":51,"tag":85,"props":440,"children":441},{"style":92},[442],{"type":57,"value":348},{"type":51,"tag":85,"props":444,"children":445},{"class":87,"line":164},[446,451,455,460],{"type":51,"tag":85,"props":447,"children":448},{"style":267},[449],{"type":57,"value":450},"AZURE_TOKEN_CREDENTIALS",{"type":51,"tag":85,"props":452,"children":453},{"style":273},[454],{"type":57,"value":387},{"type":51,"tag":85,"props":456,"children":457},{"style":108},[458],{"type":57,"value":459},"prod",{"type":51,"tag":85,"props":461,"children":462},{"style":92},[463],{"type":57,"value":464},"  # Required only if DefaultAzureCredential is used in production\n",{"type":51,"tag":66,"props":466,"children":468},{"id":467},"authentication",[469],{"type":57,"value":470},"Authentication",{"type":51,"tag":73,"props":472,"children":476},{"className":473,"code":474,"language":475,"meta":78,"style":78},"language-csharp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","using Azure.Identity;\nusing Azure.Messaging.EventHubs;\nusing Azure.Messaging.EventHubs.Producer;\n\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();\n\nvar fullyQualifiedNamespace = Environment.GetEnvironmentVariable(\"EVENTHUB_FULLY_QUALIFIED_NAMESPACE\");\nvar eventHubName = Environment.GetEnvironmentVariable(\"EVENTHUB_NAME\");\n\nvar producer = new EventHubProducerClient(\n    fullyQualifiedNamespace,\n    eventHubName,\n    credential);\n","csharp",[477],{"type":51,"tag":81,"props":478,"children":479},{"__ignoreMap":78},[480,488,496,504,511,519,527,535,543,551,559,567,575,584,593,601,610,619,628],{"type":51,"tag":85,"props":481,"children":482},{"class":87,"line":88},[483],{"type":51,"tag":85,"props":484,"children":485},{},[486],{"type":57,"value":487},"using Azure.Identity;\n",{"type":51,"tag":85,"props":489,"children":490},{"class":87,"line":98},[491],{"type":51,"tag":85,"props":492,"children":493},{},[494],{"type":57,"value":495},"using Azure.Messaging.EventHubs;\n",{"type":51,"tag":85,"props":497,"children":498},{"class":87,"line":124},[499],{"type":51,"tag":85,"props":500,"children":501},{},[502],{"type":57,"value":503},"using Azure.Messaging.EventHubs.Producer;\n",{"type":51,"tag":85,"props":505,"children":506},{"class":87,"line":134},[507],{"type":51,"tag":85,"props":508,"children":509},{"emptyLinePlaceholder":128},[510],{"type":57,"value":131},{"type":51,"tag":85,"props":512,"children":513},{"class":87,"line":143},[514],{"type":51,"tag":85,"props":515,"children":516},{},[517],{"type":57,"value":518},"\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\n",{"type":51,"tag":85,"props":520,"children":521},{"class":87,"line":164},[522],{"type":51,"tag":85,"props":523,"children":524},{},[525],{"type":57,"value":526},"var credential = new DefaultAzureCredential(\n",{"type":51,"tag":85,"props":528,"children":529},{"class":87,"line":172},[530],{"type":51,"tag":85,"props":531,"children":532},{},[533],{"type":57,"value":534},"    DefaultAzureCredential.DefaultEnvironmentVariableName\n",{"type":51,"tag":85,"props":536,"children":537},{"class":87,"line":181},[538],{"type":51,"tag":85,"props":539,"children":540},{},[541],{"type":57,"value":542},");\n",{"type":51,"tag":85,"props":544,"children":545},{"class":87,"line":202},[546],{"type":51,"tag":85,"props":547,"children":548},{},[549],{"type":57,"value":550},"\u002F\u002F Or use a specific credential directly in production:\n",{"type":51,"tag":85,"props":552,"children":553},{"class":87,"line":210},[554],{"type":51,"tag":85,"props":555,"children":556},{},[557],{"type":57,"value":558},"\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":560,"children":561},{"class":87,"line":219},[562],{"type":51,"tag":85,"props":563,"children":564},{},[565],{"type":57,"value":566},"\u002F\u002F var credential = new ManagedIdentityCredential();\n",{"type":51,"tag":85,"props":568,"children":570},{"class":87,"line":569},12,[571],{"type":51,"tag":85,"props":572,"children":573},{"emptyLinePlaceholder":128},[574],{"type":57,"value":131},{"type":51,"tag":85,"props":576,"children":578},{"class":87,"line":577},13,[579],{"type":51,"tag":85,"props":580,"children":581},{},[582],{"type":57,"value":583},"var fullyQualifiedNamespace = Environment.GetEnvironmentVariable(\"EVENTHUB_FULLY_QUALIFIED_NAMESPACE\");\n",{"type":51,"tag":85,"props":585,"children":587},{"class":87,"line":586},14,[588],{"type":51,"tag":85,"props":589,"children":590},{},[591],{"type":57,"value":592},"var eventHubName = Environment.GetEnvironmentVariable(\"EVENTHUB_NAME\");\n",{"type":51,"tag":85,"props":594,"children":596},{"class":87,"line":595},15,[597],{"type":51,"tag":85,"props":598,"children":599},{"emptyLinePlaceholder":128},[600],{"type":57,"value":131},{"type":51,"tag":85,"props":602,"children":604},{"class":87,"line":603},16,[605],{"type":51,"tag":85,"props":606,"children":607},{},[608],{"type":57,"value":609},"var producer = new EventHubProducerClient(\n",{"type":51,"tag":85,"props":611,"children":613},{"class":87,"line":612},17,[614],{"type":51,"tag":85,"props":615,"children":616},{},[617],{"type":57,"value":618},"    fullyQualifiedNamespace,\n",{"type":51,"tag":85,"props":620,"children":622},{"class":87,"line":621},18,[623],{"type":51,"tag":85,"props":624,"children":625},{},[626],{"type":57,"value":627},"    eventHubName,\n",{"type":51,"tag":85,"props":629,"children":631},{"class":87,"line":630},19,[632],{"type":51,"tag":85,"props":633,"children":634},{},[635],{"type":57,"value":636},"    credential);\n",{"type":51,"tag":60,"props":638,"children":639},{},[640,645],{"type":51,"tag":242,"props":641,"children":642},{},[643],{"type":57,"value":644},"Required RBAC Roles",{"type":57,"value":646},":",{"type":51,"tag":648,"props":649,"children":650},"ul",{},[651,668,683],{"type":51,"tag":652,"props":653,"children":654},"li",{},[655,660,662],{"type":51,"tag":242,"props":656,"children":657},{},[658],{"type":57,"value":659},"Sending",{"type":57,"value":661},": ",{"type":51,"tag":81,"props":663,"children":665},{"className":664},[],[666],{"type":57,"value":667},"Azure Event Hubs Data Sender",{"type":51,"tag":652,"props":669,"children":670},{},[671,676,677],{"type":51,"tag":242,"props":672,"children":673},{},[674],{"type":57,"value":675},"Receiving",{"type":57,"value":661},{"type":51,"tag":81,"props":678,"children":680},{"className":679},[],[681],{"type":57,"value":682},"Azure Event Hubs Data Receiver",{"type":51,"tag":652,"props":684,"children":685},{},[686,691,692],{"type":51,"tag":242,"props":687,"children":688},{},[689],{"type":57,"value":690},"Both",{"type":57,"value":661},{"type":51,"tag":81,"props":693,"children":695},{"className":694},[],[696],{"type":57,"value":697},"Azure Event Hubs Data Owner",{"type":51,"tag":66,"props":699,"children":701},{"id":700},"client-types",[702],{"type":57,"value":703},"Client Types",{"type":51,"tag":705,"props":706,"children":707},"table",{},[708,732],{"type":51,"tag":709,"props":710,"children":711},"thead",{},[712],{"type":51,"tag":713,"props":714,"children":715},"tr",{},[716,722,727],{"type":51,"tag":717,"props":718,"children":719},"th",{},[720],{"type":57,"value":721},"Client",{"type":51,"tag":717,"props":723,"children":724},{},[725],{"type":57,"value":726},"Purpose",{"type":51,"tag":717,"props":728,"children":729},{},[730],{"type":57,"value":731},"When to Use",{"type":51,"tag":733,"props":734,"children":735},"tbody",{},[736,759,781,803],{"type":51,"tag":713,"props":737,"children":738},{},[739,749,754],{"type":51,"tag":740,"props":741,"children":742},"td",{},[743],{"type":51,"tag":81,"props":744,"children":746},{"className":745},[],[747],{"type":57,"value":748},"EventHubProducerClient",{"type":51,"tag":740,"props":750,"children":751},{},[752],{"type":57,"value":753},"Send events immediately in batches",{"type":51,"tag":740,"props":755,"children":756},{},[757],{"type":57,"value":758},"Real-time sending, full control over batching",{"type":51,"tag":713,"props":760,"children":761},{},[762,771,776],{"type":51,"tag":740,"props":763,"children":764},{},[765],{"type":51,"tag":81,"props":766,"children":768},{"className":767},[],[769],{"type":57,"value":770},"EventHubBufferedProducerClient",{"type":51,"tag":740,"props":772,"children":773},{},[774],{"type":57,"value":775},"Automatic batching with background sending",{"type":51,"tag":740,"props":777,"children":778},{},[779],{"type":57,"value":780},"High-volume, fire-and-forget scenarios",{"type":51,"tag":713,"props":782,"children":783},{},[784,793,798],{"type":51,"tag":740,"props":785,"children":786},{},[787],{"type":51,"tag":81,"props":788,"children":790},{"className":789},[],[791],{"type":57,"value":792},"EventHubConsumerClient",{"type":51,"tag":740,"props":794,"children":795},{},[796],{"type":57,"value":797},"Simple event reading",{"type":51,"tag":740,"props":799,"children":800},{},[801],{"type":57,"value":802},"Prototyping only, NOT for production",{"type":51,"tag":713,"props":804,"children":805},{},[806,815,820],{"type":51,"tag":740,"props":807,"children":808},{},[809],{"type":51,"tag":81,"props":810,"children":812},{"className":811},[],[813],{"type":57,"value":814},"EventProcessorClient",{"type":51,"tag":740,"props":816,"children":817},{},[818],{"type":57,"value":819},"Production event processing",{"type":51,"tag":740,"props":821,"children":822},{},[823],{"type":51,"tag":242,"props":824,"children":825},{},[826],{"type":57,"value":827},"Always use this for receiving in production",{"type":51,"tag":66,"props":829,"children":831},{"id":830},"core-workflow",[832],{"type":57,"value":833},"Core Workflow",{"type":51,"tag":835,"props":836,"children":838},"h3",{"id":837},"_1-send-events-batch",[839],{"type":57,"value":840},"1. Send Events (Batch)",{"type":51,"tag":73,"props":842,"children":844},{"className":473,"code":843,"language":475,"meta":78,"style":78},"using Azure.Identity;\nusing Azure.Messaging.EventHubs;\nusing Azure.Messaging.EventHubs.Producer;\n\nawait using var producer = new EventHubProducerClient(\n    fullyQualifiedNamespace,\n    eventHubName,\n    new DefaultAzureCredential());\n\n\u002F\u002F Create a batch (respects size limits automatically)\nusing EventDataBatch batch = await producer.CreateBatchAsync();\n\n\u002F\u002F Add events to batch\nvar events = new[]\n{\n    new EventData(BinaryData.FromString(\"{\\\"id\\\": 1, \\\"message\\\": \\\"Hello\\\"}\")),\n    new EventData(BinaryData.FromString(\"{\\\"id\\\": 2, \\\"message\\\": \\\"World\\\"}\"))\n};\n\nforeach (var eventData in events)\n{\n    if (!batch.TryAdd(eventData))\n    {\n        \u002F\u002F Batch is full - send it and create a new one\n        await producer.SendAsync(batch);\n        batch = await producer.CreateBatchAsync();\n        \n        if (!batch.TryAdd(eventData))\n        {\n            throw new Exception(\"Event too large for empty batch\");\n        }\n    }\n}\n\n\u002F\u002F Send remaining events\nif (batch.Count > 0)\n{\n    await producer.SendAsync(batch);\n}\n",[845],{"type":51,"tag":81,"props":846,"children":847},{"__ignoreMap":78},[848,855,862,869,876,884,891,898,906,913,921,929,936,944,952,960,968,976,984,991,1000,1008,1017,1026,1035,1044,1053,1062,1071,1080,1089,1098,1107,1116,1124,1133,1142,1150,1159],{"type":51,"tag":85,"props":849,"children":850},{"class":87,"line":88},[851],{"type":51,"tag":85,"props":852,"children":853},{},[854],{"type":57,"value":487},{"type":51,"tag":85,"props":856,"children":857},{"class":87,"line":98},[858],{"type":51,"tag":85,"props":859,"children":860},{},[861],{"type":57,"value":495},{"type":51,"tag":85,"props":863,"children":864},{"class":87,"line":124},[865],{"type":51,"tag":85,"props":866,"children":867},{},[868],{"type":57,"value":503},{"type":51,"tag":85,"props":870,"children":871},{"class":87,"line":134},[872],{"type":51,"tag":85,"props":873,"children":874},{"emptyLinePlaceholder":128},[875],{"type":57,"value":131},{"type":51,"tag":85,"props":877,"children":878},{"class":87,"line":143},[879],{"type":51,"tag":85,"props":880,"children":881},{},[882],{"type":57,"value":883},"await using var producer = new EventHubProducerClient(\n",{"type":51,"tag":85,"props":885,"children":886},{"class":87,"line":164},[887],{"type":51,"tag":85,"props":888,"children":889},{},[890],{"type":57,"value":618},{"type":51,"tag":85,"props":892,"children":893},{"class":87,"line":172},[894],{"type":51,"tag":85,"props":895,"children":896},{},[897],{"type":57,"value":627},{"type":51,"tag":85,"props":899,"children":900},{"class":87,"line":181},[901],{"type":51,"tag":85,"props":902,"children":903},{},[904],{"type":57,"value":905},"    new DefaultAzureCredential());\n",{"type":51,"tag":85,"props":907,"children":908},{"class":87,"line":202},[909],{"type":51,"tag":85,"props":910,"children":911},{"emptyLinePlaceholder":128},[912],{"type":57,"value":131},{"type":51,"tag":85,"props":914,"children":915},{"class":87,"line":210},[916],{"type":51,"tag":85,"props":917,"children":918},{},[919],{"type":57,"value":920},"\u002F\u002F Create a batch (respects size limits automatically)\n",{"type":51,"tag":85,"props":922,"children":923},{"class":87,"line":219},[924],{"type":51,"tag":85,"props":925,"children":926},{},[927],{"type":57,"value":928},"using EventDataBatch batch = await producer.CreateBatchAsync();\n",{"type":51,"tag":85,"props":930,"children":931},{"class":87,"line":569},[932],{"type":51,"tag":85,"props":933,"children":934},{"emptyLinePlaceholder":128},[935],{"type":57,"value":131},{"type":51,"tag":85,"props":937,"children":938},{"class":87,"line":577},[939],{"type":51,"tag":85,"props":940,"children":941},{},[942],{"type":57,"value":943},"\u002F\u002F Add events to batch\n",{"type":51,"tag":85,"props":945,"children":946},{"class":87,"line":586},[947],{"type":51,"tag":85,"props":948,"children":949},{},[950],{"type":57,"value":951},"var events = new[]\n",{"type":51,"tag":85,"props":953,"children":954},{"class":87,"line":595},[955],{"type":51,"tag":85,"props":956,"children":957},{},[958],{"type":57,"value":959},"{\n",{"type":51,"tag":85,"props":961,"children":962},{"class":87,"line":603},[963],{"type":51,"tag":85,"props":964,"children":965},{},[966],{"type":57,"value":967},"    new EventData(BinaryData.FromString(\"{\\\"id\\\": 1, \\\"message\\\": \\\"Hello\\\"}\")),\n",{"type":51,"tag":85,"props":969,"children":970},{"class":87,"line":612},[971],{"type":51,"tag":85,"props":972,"children":973},{},[974],{"type":57,"value":975},"    new EventData(BinaryData.FromString(\"{\\\"id\\\": 2, \\\"message\\\": \\\"World\\\"}\"))\n",{"type":51,"tag":85,"props":977,"children":978},{"class":87,"line":621},[979],{"type":51,"tag":85,"props":980,"children":981},{},[982],{"type":57,"value":983},"};\n",{"type":51,"tag":85,"props":985,"children":986},{"class":87,"line":630},[987],{"type":51,"tag":85,"props":988,"children":989},{"emptyLinePlaceholder":128},[990],{"type":57,"value":131},{"type":51,"tag":85,"props":992,"children":994},{"class":87,"line":993},20,[995],{"type":51,"tag":85,"props":996,"children":997},{},[998],{"type":57,"value":999},"foreach (var eventData in events)\n",{"type":51,"tag":85,"props":1001,"children":1003},{"class":87,"line":1002},21,[1004],{"type":51,"tag":85,"props":1005,"children":1006},{},[1007],{"type":57,"value":959},{"type":51,"tag":85,"props":1009,"children":1011},{"class":87,"line":1010},22,[1012],{"type":51,"tag":85,"props":1013,"children":1014},{},[1015],{"type":57,"value":1016},"    if (!batch.TryAdd(eventData))\n",{"type":51,"tag":85,"props":1018,"children":1020},{"class":87,"line":1019},23,[1021],{"type":51,"tag":85,"props":1022,"children":1023},{},[1024],{"type":57,"value":1025},"    {\n",{"type":51,"tag":85,"props":1027,"children":1029},{"class":87,"line":1028},24,[1030],{"type":51,"tag":85,"props":1031,"children":1032},{},[1033],{"type":57,"value":1034},"        \u002F\u002F Batch is full - send it and create a new one\n",{"type":51,"tag":85,"props":1036,"children":1038},{"class":87,"line":1037},25,[1039],{"type":51,"tag":85,"props":1040,"children":1041},{},[1042],{"type":57,"value":1043},"        await producer.SendAsync(batch);\n",{"type":51,"tag":85,"props":1045,"children":1047},{"class":87,"line":1046},26,[1048],{"type":51,"tag":85,"props":1049,"children":1050},{},[1051],{"type":57,"value":1052},"        batch = await producer.CreateBatchAsync();\n",{"type":51,"tag":85,"props":1054,"children":1056},{"class":87,"line":1055},27,[1057],{"type":51,"tag":85,"props":1058,"children":1059},{},[1060],{"type":57,"value":1061},"        \n",{"type":51,"tag":85,"props":1063,"children":1065},{"class":87,"line":1064},28,[1066],{"type":51,"tag":85,"props":1067,"children":1068},{},[1069],{"type":57,"value":1070},"        if (!batch.TryAdd(eventData))\n",{"type":51,"tag":85,"props":1072,"children":1074},{"class":87,"line":1073},29,[1075],{"type":51,"tag":85,"props":1076,"children":1077},{},[1078],{"type":57,"value":1079},"        {\n",{"type":51,"tag":85,"props":1081,"children":1083},{"class":87,"line":1082},30,[1084],{"type":51,"tag":85,"props":1085,"children":1086},{},[1087],{"type":57,"value":1088},"            throw new Exception(\"Event too large for empty batch\");\n",{"type":51,"tag":85,"props":1090,"children":1092},{"class":87,"line":1091},31,[1093],{"type":51,"tag":85,"props":1094,"children":1095},{},[1096],{"type":57,"value":1097},"        }\n",{"type":51,"tag":85,"props":1099,"children":1101},{"class":87,"line":1100},32,[1102],{"type":51,"tag":85,"props":1103,"children":1104},{},[1105],{"type":57,"value":1106},"    }\n",{"type":51,"tag":85,"props":1108,"children":1110},{"class":87,"line":1109},33,[1111],{"type":51,"tag":85,"props":1112,"children":1113},{},[1114],{"type":57,"value":1115},"}\n",{"type":51,"tag":85,"props":1117,"children":1119},{"class":87,"line":1118},34,[1120],{"type":51,"tag":85,"props":1121,"children":1122},{"emptyLinePlaceholder":128},[1123],{"type":57,"value":131},{"type":51,"tag":85,"props":1125,"children":1127},{"class":87,"line":1126},35,[1128],{"type":51,"tag":85,"props":1129,"children":1130},{},[1131],{"type":57,"value":1132},"\u002F\u002F Send remaining events\n",{"type":51,"tag":85,"props":1134,"children":1136},{"class":87,"line":1135},36,[1137],{"type":51,"tag":85,"props":1138,"children":1139},{},[1140],{"type":57,"value":1141},"if (batch.Count > 0)\n",{"type":51,"tag":85,"props":1143,"children":1145},{"class":87,"line":1144},37,[1146],{"type":51,"tag":85,"props":1147,"children":1148},{},[1149],{"type":57,"value":959},{"type":51,"tag":85,"props":1151,"children":1153},{"class":87,"line":1152},38,[1154],{"type":51,"tag":85,"props":1155,"children":1156},{},[1157],{"type":57,"value":1158},"    await producer.SendAsync(batch);\n",{"type":51,"tag":85,"props":1160,"children":1162},{"class":87,"line":1161},39,[1163],{"type":51,"tag":85,"props":1164,"children":1165},{},[1166],{"type":57,"value":1115},{"type":51,"tag":835,"props":1168,"children":1170},{"id":1169},"_2-send-events-buffered-high-volume",[1171],{"type":57,"value":1172},"2. Send Events (Buffered - High Volume)",{"type":51,"tag":73,"props":1174,"children":1176},{"className":473,"code":1175,"language":475,"meta":78,"style":78},"using Azure.Messaging.EventHubs.Producer;\n\nvar options = new EventHubBufferedProducerClientOptions\n{\n    MaximumWaitTime = TimeSpan.FromSeconds(1)\n};\n\nawait using var producer = new EventHubBufferedProducerClient(\n    fullyQualifiedNamespace,\n    eventHubName,\n    new DefaultAzureCredential(),\n    options);\n\n\u002F\u002F Handle send success\u002Ffailure\nproducer.SendEventBatchSucceededAsync += args =>\n{\n    Console.WriteLine($\"Batch sent: {args.EventBatch.Count} events\");\n    return Task.CompletedTask;\n};\n\nproducer.SendEventBatchFailedAsync += args =>\n{\n    Console.WriteLine($\"Batch failed: {args.Exception.Message}\");\n    return Task.CompletedTask;\n};\n\n\u002F\u002F Enqueue events (sent automatically in background)\nfor (int i = 0; i \u003C 1000; i++)\n{\n    await producer.EnqueueEventAsync(new EventData($\"Event {i}\"));\n}\n\n\u002F\u002F Flush remaining events before disposing\nawait producer.FlushAsync();\n",[1177],{"type":51,"tag":81,"props":1178,"children":1179},{"__ignoreMap":78},[1180,1187,1194,1202,1209,1217,1224,1231,1239,1246,1253,1261,1269,1276,1284,1292,1299,1307,1315,1322,1329,1337,1344,1352,1359,1366,1373,1381,1389,1396,1404,1411,1418,1426],{"type":51,"tag":85,"props":1181,"children":1182},{"class":87,"line":88},[1183],{"type":51,"tag":85,"props":1184,"children":1185},{},[1186],{"type":57,"value":503},{"type":51,"tag":85,"props":1188,"children":1189},{"class":87,"line":98},[1190],{"type":51,"tag":85,"props":1191,"children":1192},{"emptyLinePlaceholder":128},[1193],{"type":57,"value":131},{"type":51,"tag":85,"props":1195,"children":1196},{"class":87,"line":124},[1197],{"type":51,"tag":85,"props":1198,"children":1199},{},[1200],{"type":57,"value":1201},"var options = new EventHubBufferedProducerClientOptions\n",{"type":51,"tag":85,"props":1203,"children":1204},{"class":87,"line":134},[1205],{"type":51,"tag":85,"props":1206,"children":1207},{},[1208],{"type":57,"value":959},{"type":51,"tag":85,"props":1210,"children":1211},{"class":87,"line":143},[1212],{"type":51,"tag":85,"props":1213,"children":1214},{},[1215],{"type":57,"value":1216},"    MaximumWaitTime = TimeSpan.FromSeconds(1)\n",{"type":51,"tag":85,"props":1218,"children":1219},{"class":87,"line":164},[1220],{"type":51,"tag":85,"props":1221,"children":1222},{},[1223],{"type":57,"value":983},{"type":51,"tag":85,"props":1225,"children":1226},{"class":87,"line":172},[1227],{"type":51,"tag":85,"props":1228,"children":1229},{"emptyLinePlaceholder":128},[1230],{"type":57,"value":131},{"type":51,"tag":85,"props":1232,"children":1233},{"class":87,"line":181},[1234],{"type":51,"tag":85,"props":1235,"children":1236},{},[1237],{"type":57,"value":1238},"await using var producer = new EventHubBufferedProducerClient(\n",{"type":51,"tag":85,"props":1240,"children":1241},{"class":87,"line":202},[1242],{"type":51,"tag":85,"props":1243,"children":1244},{},[1245],{"type":57,"value":618},{"type":51,"tag":85,"props":1247,"children":1248},{"class":87,"line":210},[1249],{"type":51,"tag":85,"props":1250,"children":1251},{},[1252],{"type":57,"value":627},{"type":51,"tag":85,"props":1254,"children":1255},{"class":87,"line":219},[1256],{"type":51,"tag":85,"props":1257,"children":1258},{},[1259],{"type":57,"value":1260},"    new DefaultAzureCredential(),\n",{"type":51,"tag":85,"props":1262,"children":1263},{"class":87,"line":569},[1264],{"type":51,"tag":85,"props":1265,"children":1266},{},[1267],{"type":57,"value":1268},"    options);\n",{"type":51,"tag":85,"props":1270,"children":1271},{"class":87,"line":577},[1272],{"type":51,"tag":85,"props":1273,"children":1274},{"emptyLinePlaceholder":128},[1275],{"type":57,"value":131},{"type":51,"tag":85,"props":1277,"children":1278},{"class":87,"line":586},[1279],{"type":51,"tag":85,"props":1280,"children":1281},{},[1282],{"type":57,"value":1283},"\u002F\u002F Handle send success\u002Ffailure\n",{"type":51,"tag":85,"props":1285,"children":1286},{"class":87,"line":595},[1287],{"type":51,"tag":85,"props":1288,"children":1289},{},[1290],{"type":57,"value":1291},"producer.SendEventBatchSucceededAsync += args =>\n",{"type":51,"tag":85,"props":1293,"children":1294},{"class":87,"line":603},[1295],{"type":51,"tag":85,"props":1296,"children":1297},{},[1298],{"type":57,"value":959},{"type":51,"tag":85,"props":1300,"children":1301},{"class":87,"line":612},[1302],{"type":51,"tag":85,"props":1303,"children":1304},{},[1305],{"type":57,"value":1306},"    Console.WriteLine($\"Batch sent: {args.EventBatch.Count} events\");\n",{"type":51,"tag":85,"props":1308,"children":1309},{"class":87,"line":621},[1310],{"type":51,"tag":85,"props":1311,"children":1312},{},[1313],{"type":57,"value":1314},"    return Task.CompletedTask;\n",{"type":51,"tag":85,"props":1316,"children":1317},{"class":87,"line":630},[1318],{"type":51,"tag":85,"props":1319,"children":1320},{},[1321],{"type":57,"value":983},{"type":51,"tag":85,"props":1323,"children":1324},{"class":87,"line":993},[1325],{"type":51,"tag":85,"props":1326,"children":1327},{"emptyLinePlaceholder":128},[1328],{"type":57,"value":131},{"type":51,"tag":85,"props":1330,"children":1331},{"class":87,"line":1002},[1332],{"type":51,"tag":85,"props":1333,"children":1334},{},[1335],{"type":57,"value":1336},"producer.SendEventBatchFailedAsync += args =>\n",{"type":51,"tag":85,"props":1338,"children":1339},{"class":87,"line":1010},[1340],{"type":51,"tag":85,"props":1341,"children":1342},{},[1343],{"type":57,"value":959},{"type":51,"tag":85,"props":1345,"children":1346},{"class":87,"line":1019},[1347],{"type":51,"tag":85,"props":1348,"children":1349},{},[1350],{"type":57,"value":1351},"    Console.WriteLine($\"Batch failed: {args.Exception.Message}\");\n",{"type":51,"tag":85,"props":1353,"children":1354},{"class":87,"line":1028},[1355],{"type":51,"tag":85,"props":1356,"children":1357},{},[1358],{"type":57,"value":1314},{"type":51,"tag":85,"props":1360,"children":1361},{"class":87,"line":1037},[1362],{"type":51,"tag":85,"props":1363,"children":1364},{},[1365],{"type":57,"value":983},{"type":51,"tag":85,"props":1367,"children":1368},{"class":87,"line":1046},[1369],{"type":51,"tag":85,"props":1370,"children":1371},{"emptyLinePlaceholder":128},[1372],{"type":57,"value":131},{"type":51,"tag":85,"props":1374,"children":1375},{"class":87,"line":1055},[1376],{"type":51,"tag":85,"props":1377,"children":1378},{},[1379],{"type":57,"value":1380},"\u002F\u002F Enqueue events (sent automatically in background)\n",{"type":51,"tag":85,"props":1382,"children":1383},{"class":87,"line":1064},[1384],{"type":51,"tag":85,"props":1385,"children":1386},{},[1387],{"type":57,"value":1388},"for (int i = 0; i \u003C 1000; i++)\n",{"type":51,"tag":85,"props":1390,"children":1391},{"class":87,"line":1073},[1392],{"type":51,"tag":85,"props":1393,"children":1394},{},[1395],{"type":57,"value":959},{"type":51,"tag":85,"props":1397,"children":1398},{"class":87,"line":1082},[1399],{"type":51,"tag":85,"props":1400,"children":1401},{},[1402],{"type":57,"value":1403},"    await producer.EnqueueEventAsync(new EventData($\"Event {i}\"));\n",{"type":51,"tag":85,"props":1405,"children":1406},{"class":87,"line":1091},[1407],{"type":51,"tag":85,"props":1408,"children":1409},{},[1410],{"type":57,"value":1115},{"type":51,"tag":85,"props":1412,"children":1413},{"class":87,"line":1100},[1414],{"type":51,"tag":85,"props":1415,"children":1416},{"emptyLinePlaceholder":128},[1417],{"type":57,"value":131},{"type":51,"tag":85,"props":1419,"children":1420},{"class":87,"line":1109},[1421],{"type":51,"tag":85,"props":1422,"children":1423},{},[1424],{"type":57,"value":1425},"\u002F\u002F Flush remaining events before disposing\n",{"type":51,"tag":85,"props":1427,"children":1428},{"class":87,"line":1118},[1429],{"type":51,"tag":85,"props":1430,"children":1431},{},[1432],{"type":57,"value":1433},"await producer.FlushAsync();\n",{"type":51,"tag":835,"props":1435,"children":1437},{"id":1436},"_3-receive-events-production-eventprocessorclient",[1438],{"type":57,"value":1439},"3. Receive Events (Production - EventProcessorClient)",{"type":51,"tag":73,"props":1441,"children":1443},{"className":473,"code":1442,"language":475,"meta":78,"style":78},"using Azure.Identity;\nusing Azure.Messaging.EventHubs;\nusing Azure.Messaging.EventHubs.Consumer;\nusing Azure.Messaging.EventHubs.Processor;\nusing Azure.Storage.Blobs;\n\n\u002F\u002F Blob container for checkpointing\nvar blobClient = new BlobContainerClient(\n    Environment.GetEnvironmentVariable(\"BLOB_STORAGE_CONNECTION_STRING\"),\n    Environment.GetEnvironmentVariable(\"BLOB_CONTAINER_NAME\"));\n\nawait blobClient.CreateIfNotExistsAsync();\n\n\u002F\u002F Create processor\nvar processor = new EventProcessorClient(\n    blobClient,\n    EventHubConsumerClient.DefaultConsumerGroup,\n    fullyQualifiedNamespace,\n    eventHubName,\n    new DefaultAzureCredential());\n\n\u002F\u002F Handle events\nprocessor.ProcessEventAsync += async args =>\n{\n    Console.WriteLine($\"Partition: {args.Partition.PartitionId}\");\n    Console.WriteLine($\"Data: {args.Data.EventBody}\");\n    \n    \u002F\u002F Checkpoint after processing (or batch checkpoints)\n    await args.UpdateCheckpointAsync();\n};\n\n\u002F\u002F Handle errors\nprocessor.ProcessErrorAsync += args =>\n{\n    Console.WriteLine($\"Error: {args.Exception.Message}\");\n    Console.WriteLine($\"Partition: {args.PartitionId}\");\n    return Task.CompletedTask;\n};\n\n\u002F\u002F Start processing\nawait processor.StartProcessingAsync();\n\n\u002F\u002F Run until cancelled\nawait Task.Delay(Timeout.Infinite, cancellationToken);\n\n\u002F\u002F Stop gracefully\nawait processor.StopProcessingAsync();\n",[1444],{"type":51,"tag":81,"props":1445,"children":1446},{"__ignoreMap":78},[1447,1454,1461,1469,1477,1485,1492,1500,1508,1516,1524,1531,1539,1546,1554,1562,1570,1578,1585,1592,1599,1606,1614,1622,1629,1637,1645,1653,1661,1669,1676,1683,1691,1699,1706,1714,1722,1729,1736,1743,1752,1761,1769,1778,1787,1795,1804],{"type":51,"tag":85,"props":1448,"children":1449},{"class":87,"line":88},[1450],{"type":51,"tag":85,"props":1451,"children":1452},{},[1453],{"type":57,"value":487},{"type":51,"tag":85,"props":1455,"children":1456},{"class":87,"line":98},[1457],{"type":51,"tag":85,"props":1458,"children":1459},{},[1460],{"type":57,"value":495},{"type":51,"tag":85,"props":1462,"children":1463},{"class":87,"line":124},[1464],{"type":51,"tag":85,"props":1465,"children":1466},{},[1467],{"type":57,"value":1468},"using Azure.Messaging.EventHubs.Consumer;\n",{"type":51,"tag":85,"props":1470,"children":1471},{"class":87,"line":134},[1472],{"type":51,"tag":85,"props":1473,"children":1474},{},[1475],{"type":57,"value":1476},"using Azure.Messaging.EventHubs.Processor;\n",{"type":51,"tag":85,"props":1478,"children":1479},{"class":87,"line":143},[1480],{"type":51,"tag":85,"props":1481,"children":1482},{},[1483],{"type":57,"value":1484},"using Azure.Storage.Blobs;\n",{"type":51,"tag":85,"props":1486,"children":1487},{"class":87,"line":164},[1488],{"type":51,"tag":85,"props":1489,"children":1490},{"emptyLinePlaceholder":128},[1491],{"type":57,"value":131},{"type":51,"tag":85,"props":1493,"children":1494},{"class":87,"line":172},[1495],{"type":51,"tag":85,"props":1496,"children":1497},{},[1498],{"type":57,"value":1499},"\u002F\u002F Blob container for checkpointing\n",{"type":51,"tag":85,"props":1501,"children":1502},{"class":87,"line":181},[1503],{"type":51,"tag":85,"props":1504,"children":1505},{},[1506],{"type":57,"value":1507},"var blobClient = new BlobContainerClient(\n",{"type":51,"tag":85,"props":1509,"children":1510},{"class":87,"line":202},[1511],{"type":51,"tag":85,"props":1512,"children":1513},{},[1514],{"type":57,"value":1515},"    Environment.GetEnvironmentVariable(\"BLOB_STORAGE_CONNECTION_STRING\"),\n",{"type":51,"tag":85,"props":1517,"children":1518},{"class":87,"line":210},[1519],{"type":51,"tag":85,"props":1520,"children":1521},{},[1522],{"type":57,"value":1523},"    Environment.GetEnvironmentVariable(\"BLOB_CONTAINER_NAME\"));\n",{"type":51,"tag":85,"props":1525,"children":1526},{"class":87,"line":219},[1527],{"type":51,"tag":85,"props":1528,"children":1529},{"emptyLinePlaceholder":128},[1530],{"type":57,"value":131},{"type":51,"tag":85,"props":1532,"children":1533},{"class":87,"line":569},[1534],{"type":51,"tag":85,"props":1535,"children":1536},{},[1537],{"type":57,"value":1538},"await blobClient.CreateIfNotExistsAsync();\n",{"type":51,"tag":85,"props":1540,"children":1541},{"class":87,"line":577},[1542],{"type":51,"tag":85,"props":1543,"children":1544},{"emptyLinePlaceholder":128},[1545],{"type":57,"value":131},{"type":51,"tag":85,"props":1547,"children":1548},{"class":87,"line":586},[1549],{"type":51,"tag":85,"props":1550,"children":1551},{},[1552],{"type":57,"value":1553},"\u002F\u002F Create processor\n",{"type":51,"tag":85,"props":1555,"children":1556},{"class":87,"line":595},[1557],{"type":51,"tag":85,"props":1558,"children":1559},{},[1560],{"type":57,"value":1561},"var processor = new EventProcessorClient(\n",{"type":51,"tag":85,"props":1563,"children":1564},{"class":87,"line":603},[1565],{"type":51,"tag":85,"props":1566,"children":1567},{},[1568],{"type":57,"value":1569},"    blobClient,\n",{"type":51,"tag":85,"props":1571,"children":1572},{"class":87,"line":612},[1573],{"type":51,"tag":85,"props":1574,"children":1575},{},[1576],{"type":57,"value":1577},"    EventHubConsumerClient.DefaultConsumerGroup,\n",{"type":51,"tag":85,"props":1579,"children":1580},{"class":87,"line":621},[1581],{"type":51,"tag":85,"props":1582,"children":1583},{},[1584],{"type":57,"value":618},{"type":51,"tag":85,"props":1586,"children":1587},{"class":87,"line":630},[1588],{"type":51,"tag":85,"props":1589,"children":1590},{},[1591],{"type":57,"value":627},{"type":51,"tag":85,"props":1593,"children":1594},{"class":87,"line":993},[1595],{"type":51,"tag":85,"props":1596,"children":1597},{},[1598],{"type":57,"value":905},{"type":51,"tag":85,"props":1600,"children":1601},{"class":87,"line":1002},[1602],{"type":51,"tag":85,"props":1603,"children":1604},{"emptyLinePlaceholder":128},[1605],{"type":57,"value":131},{"type":51,"tag":85,"props":1607,"children":1608},{"class":87,"line":1010},[1609],{"type":51,"tag":85,"props":1610,"children":1611},{},[1612],{"type":57,"value":1613},"\u002F\u002F Handle events\n",{"type":51,"tag":85,"props":1615,"children":1616},{"class":87,"line":1019},[1617],{"type":51,"tag":85,"props":1618,"children":1619},{},[1620],{"type":57,"value":1621},"processor.ProcessEventAsync += async args =>\n",{"type":51,"tag":85,"props":1623,"children":1624},{"class":87,"line":1028},[1625],{"type":51,"tag":85,"props":1626,"children":1627},{},[1628],{"type":57,"value":959},{"type":51,"tag":85,"props":1630,"children":1631},{"class":87,"line":1037},[1632],{"type":51,"tag":85,"props":1633,"children":1634},{},[1635],{"type":57,"value":1636},"    Console.WriteLine($\"Partition: {args.Partition.PartitionId}\");\n",{"type":51,"tag":85,"props":1638,"children":1639},{"class":87,"line":1046},[1640],{"type":51,"tag":85,"props":1641,"children":1642},{},[1643],{"type":57,"value":1644},"    Console.WriteLine($\"Data: {args.Data.EventBody}\");\n",{"type":51,"tag":85,"props":1646,"children":1647},{"class":87,"line":1055},[1648],{"type":51,"tag":85,"props":1649,"children":1650},{},[1651],{"type":57,"value":1652},"    \n",{"type":51,"tag":85,"props":1654,"children":1655},{"class":87,"line":1064},[1656],{"type":51,"tag":85,"props":1657,"children":1658},{},[1659],{"type":57,"value":1660},"    \u002F\u002F Checkpoint after processing (or batch checkpoints)\n",{"type":51,"tag":85,"props":1662,"children":1663},{"class":87,"line":1073},[1664],{"type":51,"tag":85,"props":1665,"children":1666},{},[1667],{"type":57,"value":1668},"    await args.UpdateCheckpointAsync();\n",{"type":51,"tag":85,"props":1670,"children":1671},{"class":87,"line":1082},[1672],{"type":51,"tag":85,"props":1673,"children":1674},{},[1675],{"type":57,"value":983},{"type":51,"tag":85,"props":1677,"children":1678},{"class":87,"line":1091},[1679],{"type":51,"tag":85,"props":1680,"children":1681},{"emptyLinePlaceholder":128},[1682],{"type":57,"value":131},{"type":51,"tag":85,"props":1684,"children":1685},{"class":87,"line":1100},[1686],{"type":51,"tag":85,"props":1687,"children":1688},{},[1689],{"type":57,"value":1690},"\u002F\u002F Handle errors\n",{"type":51,"tag":85,"props":1692,"children":1693},{"class":87,"line":1109},[1694],{"type":51,"tag":85,"props":1695,"children":1696},{},[1697],{"type":57,"value":1698},"processor.ProcessErrorAsync += args =>\n",{"type":51,"tag":85,"props":1700,"children":1701},{"class":87,"line":1118},[1702],{"type":51,"tag":85,"props":1703,"children":1704},{},[1705],{"type":57,"value":959},{"type":51,"tag":85,"props":1707,"children":1708},{"class":87,"line":1126},[1709],{"type":51,"tag":85,"props":1710,"children":1711},{},[1712],{"type":57,"value":1713},"    Console.WriteLine($\"Error: {args.Exception.Message}\");\n",{"type":51,"tag":85,"props":1715,"children":1716},{"class":87,"line":1135},[1717],{"type":51,"tag":85,"props":1718,"children":1719},{},[1720],{"type":57,"value":1721},"    Console.WriteLine($\"Partition: {args.PartitionId}\");\n",{"type":51,"tag":85,"props":1723,"children":1724},{"class":87,"line":1144},[1725],{"type":51,"tag":85,"props":1726,"children":1727},{},[1728],{"type":57,"value":1314},{"type":51,"tag":85,"props":1730,"children":1731},{"class":87,"line":1152},[1732],{"type":51,"tag":85,"props":1733,"children":1734},{},[1735],{"type":57,"value":983},{"type":51,"tag":85,"props":1737,"children":1738},{"class":87,"line":1161},[1739],{"type":51,"tag":85,"props":1740,"children":1741},{"emptyLinePlaceholder":128},[1742],{"type":57,"value":131},{"type":51,"tag":85,"props":1744,"children":1746},{"class":87,"line":1745},40,[1747],{"type":51,"tag":85,"props":1748,"children":1749},{},[1750],{"type":57,"value":1751},"\u002F\u002F Start processing\n",{"type":51,"tag":85,"props":1753,"children":1755},{"class":87,"line":1754},41,[1756],{"type":51,"tag":85,"props":1757,"children":1758},{},[1759],{"type":57,"value":1760},"await processor.StartProcessingAsync();\n",{"type":51,"tag":85,"props":1762,"children":1764},{"class":87,"line":1763},42,[1765],{"type":51,"tag":85,"props":1766,"children":1767},{"emptyLinePlaceholder":128},[1768],{"type":57,"value":131},{"type":51,"tag":85,"props":1770,"children":1772},{"class":87,"line":1771},43,[1773],{"type":51,"tag":85,"props":1774,"children":1775},{},[1776],{"type":57,"value":1777},"\u002F\u002F Run until cancelled\n",{"type":51,"tag":85,"props":1779,"children":1781},{"class":87,"line":1780},44,[1782],{"type":51,"tag":85,"props":1783,"children":1784},{},[1785],{"type":57,"value":1786},"await Task.Delay(Timeout.Infinite, cancellationToken);\n",{"type":51,"tag":85,"props":1788,"children":1790},{"class":87,"line":1789},45,[1791],{"type":51,"tag":85,"props":1792,"children":1793},{"emptyLinePlaceholder":128},[1794],{"type":57,"value":131},{"type":51,"tag":85,"props":1796,"children":1798},{"class":87,"line":1797},46,[1799],{"type":51,"tag":85,"props":1800,"children":1801},{},[1802],{"type":57,"value":1803},"\u002F\u002F Stop gracefully\n",{"type":51,"tag":85,"props":1805,"children":1807},{"class":87,"line":1806},47,[1808],{"type":51,"tag":85,"props":1809,"children":1810},{},[1811],{"type":57,"value":1812},"await processor.StopProcessingAsync();\n",{"type":51,"tag":835,"props":1814,"children":1816},{"id":1815},"_4-partition-operations",[1817],{"type":57,"value":1818},"4. Partition Operations",{"type":51,"tag":73,"props":1820,"children":1822},{"className":473,"code":1821,"language":475,"meta":78,"style":78},"\u002F\u002F Get partition IDs\nstring[] partitionIds = await producer.GetPartitionIdsAsync();\n\n\u002F\u002F Send to specific partition (use sparingly)\nvar options = new SendEventOptions\n{\n    PartitionId = \"0\"\n};\nawait producer.SendAsync(events, options);\n\n\u002F\u002F Use partition key (recommended for ordering)\nvar batchOptions = new CreateBatchOptions\n{\n    PartitionKey = \"customer-123\"  \u002F\u002F Events with same key go to same partition\n};\nusing var batch = await producer.CreateBatchAsync(batchOptions);\n",[1823],{"type":51,"tag":81,"props":1824,"children":1825},{"__ignoreMap":78},[1826,1834,1842,1849,1857,1865,1872,1880,1887,1895,1902,1910,1918,1925,1933,1940],{"type":51,"tag":85,"props":1827,"children":1828},{"class":87,"line":88},[1829],{"type":51,"tag":85,"props":1830,"children":1831},{},[1832],{"type":57,"value":1833},"\u002F\u002F Get partition IDs\n",{"type":51,"tag":85,"props":1835,"children":1836},{"class":87,"line":98},[1837],{"type":51,"tag":85,"props":1838,"children":1839},{},[1840],{"type":57,"value":1841},"string[] partitionIds = await producer.GetPartitionIdsAsync();\n",{"type":51,"tag":85,"props":1843,"children":1844},{"class":87,"line":124},[1845],{"type":51,"tag":85,"props":1846,"children":1847},{"emptyLinePlaceholder":128},[1848],{"type":57,"value":131},{"type":51,"tag":85,"props":1850,"children":1851},{"class":87,"line":134},[1852],{"type":51,"tag":85,"props":1853,"children":1854},{},[1855],{"type":57,"value":1856},"\u002F\u002F Send to specific partition (use sparingly)\n",{"type":51,"tag":85,"props":1858,"children":1859},{"class":87,"line":143},[1860],{"type":51,"tag":85,"props":1861,"children":1862},{},[1863],{"type":57,"value":1864},"var options = new SendEventOptions\n",{"type":51,"tag":85,"props":1866,"children":1867},{"class":87,"line":164},[1868],{"type":51,"tag":85,"props":1869,"children":1870},{},[1871],{"type":57,"value":959},{"type":51,"tag":85,"props":1873,"children":1874},{"class":87,"line":172},[1875],{"type":51,"tag":85,"props":1876,"children":1877},{},[1878],{"type":57,"value":1879},"    PartitionId = \"0\"\n",{"type":51,"tag":85,"props":1881,"children":1882},{"class":87,"line":181},[1883],{"type":51,"tag":85,"props":1884,"children":1885},{},[1886],{"type":57,"value":983},{"type":51,"tag":85,"props":1888,"children":1889},{"class":87,"line":202},[1890],{"type":51,"tag":85,"props":1891,"children":1892},{},[1893],{"type":57,"value":1894},"await producer.SendAsync(events, options);\n",{"type":51,"tag":85,"props":1896,"children":1897},{"class":87,"line":210},[1898],{"type":51,"tag":85,"props":1899,"children":1900},{"emptyLinePlaceholder":128},[1901],{"type":57,"value":131},{"type":51,"tag":85,"props":1903,"children":1904},{"class":87,"line":219},[1905],{"type":51,"tag":85,"props":1906,"children":1907},{},[1908],{"type":57,"value":1909},"\u002F\u002F Use partition key (recommended for ordering)\n",{"type":51,"tag":85,"props":1911,"children":1912},{"class":87,"line":569},[1913],{"type":51,"tag":85,"props":1914,"children":1915},{},[1916],{"type":57,"value":1917},"var batchOptions = new CreateBatchOptions\n",{"type":51,"tag":85,"props":1919,"children":1920},{"class":87,"line":577},[1921],{"type":51,"tag":85,"props":1922,"children":1923},{},[1924],{"type":57,"value":959},{"type":51,"tag":85,"props":1926,"children":1927},{"class":87,"line":586},[1928],{"type":51,"tag":85,"props":1929,"children":1930},{},[1931],{"type":57,"value":1932},"    PartitionKey = \"customer-123\"  \u002F\u002F Events with same key go to same partition\n",{"type":51,"tag":85,"props":1934,"children":1935},{"class":87,"line":595},[1936],{"type":51,"tag":85,"props":1937,"children":1938},{},[1939],{"type":57,"value":983},{"type":51,"tag":85,"props":1941,"children":1942},{"class":87,"line":603},[1943],{"type":51,"tag":85,"props":1944,"children":1945},{},[1946],{"type":57,"value":1947},"using var batch = await producer.CreateBatchAsync(batchOptions);\n",{"type":51,"tag":66,"props":1949,"children":1951},{"id":1950},"eventposition-options",[1952],{"type":57,"value":1953},"EventPosition Options",{"type":51,"tag":60,"props":1955,"children":1956},{},[1957],{"type":57,"value":1958},"Control where to start reading:",{"type":51,"tag":73,"props":1960,"children":1962},{"className":473,"code":1961,"language":475,"meta":78,"style":78},"\u002F\u002F Start from beginning\nEventPosition.Earliest\n\n\u002F\u002F Start from end (new events only)\nEventPosition.Latest\n\n\u002F\u002F Start from specific offset\nEventPosition.FromOffset(12345)\n\n\u002F\u002F Start from specific sequence number\nEventPosition.FromSequenceNumber(100)\n\n\u002F\u002F Start from specific time\nEventPosition.FromEnqueuedTime(DateTimeOffset.UtcNow.AddHours(-1))\n",[1963],{"type":51,"tag":81,"props":1964,"children":1965},{"__ignoreMap":78},[1966,1974,1982,1989,1997,2005,2012,2020,2028,2035,2043,2051,2058,2066],{"type":51,"tag":85,"props":1967,"children":1968},{"class":87,"line":88},[1969],{"type":51,"tag":85,"props":1970,"children":1971},{},[1972],{"type":57,"value":1973},"\u002F\u002F Start from beginning\n",{"type":51,"tag":85,"props":1975,"children":1976},{"class":87,"line":98},[1977],{"type":51,"tag":85,"props":1978,"children":1979},{},[1980],{"type":57,"value":1981},"EventPosition.Earliest\n",{"type":51,"tag":85,"props":1983,"children":1984},{"class":87,"line":124},[1985],{"type":51,"tag":85,"props":1986,"children":1987},{"emptyLinePlaceholder":128},[1988],{"type":57,"value":131},{"type":51,"tag":85,"props":1990,"children":1991},{"class":87,"line":134},[1992],{"type":51,"tag":85,"props":1993,"children":1994},{},[1995],{"type":57,"value":1996},"\u002F\u002F Start from end (new events only)\n",{"type":51,"tag":85,"props":1998,"children":1999},{"class":87,"line":143},[2000],{"type":51,"tag":85,"props":2001,"children":2002},{},[2003],{"type":57,"value":2004},"EventPosition.Latest\n",{"type":51,"tag":85,"props":2006,"children":2007},{"class":87,"line":164},[2008],{"type":51,"tag":85,"props":2009,"children":2010},{"emptyLinePlaceholder":128},[2011],{"type":57,"value":131},{"type":51,"tag":85,"props":2013,"children":2014},{"class":87,"line":172},[2015],{"type":51,"tag":85,"props":2016,"children":2017},{},[2018],{"type":57,"value":2019},"\u002F\u002F Start from specific offset\n",{"type":51,"tag":85,"props":2021,"children":2022},{"class":87,"line":181},[2023],{"type":51,"tag":85,"props":2024,"children":2025},{},[2026],{"type":57,"value":2027},"EventPosition.FromOffset(12345)\n",{"type":51,"tag":85,"props":2029,"children":2030},{"class":87,"line":202},[2031],{"type":51,"tag":85,"props":2032,"children":2033},{"emptyLinePlaceholder":128},[2034],{"type":57,"value":131},{"type":51,"tag":85,"props":2036,"children":2037},{"class":87,"line":210},[2038],{"type":51,"tag":85,"props":2039,"children":2040},{},[2041],{"type":57,"value":2042},"\u002F\u002F Start from specific sequence number\n",{"type":51,"tag":85,"props":2044,"children":2045},{"class":87,"line":219},[2046],{"type":51,"tag":85,"props":2047,"children":2048},{},[2049],{"type":57,"value":2050},"EventPosition.FromSequenceNumber(100)\n",{"type":51,"tag":85,"props":2052,"children":2053},{"class":87,"line":569},[2054],{"type":51,"tag":85,"props":2055,"children":2056},{"emptyLinePlaceholder":128},[2057],{"type":57,"value":131},{"type":51,"tag":85,"props":2059,"children":2060},{"class":87,"line":577},[2061],{"type":51,"tag":85,"props":2062,"children":2063},{},[2064],{"type":57,"value":2065},"\u002F\u002F Start from specific time\n",{"type":51,"tag":85,"props":2067,"children":2068},{"class":87,"line":586},[2069],{"type":51,"tag":85,"props":2070,"children":2071},{},[2072],{"type":57,"value":2073},"EventPosition.FromEnqueuedTime(DateTimeOffset.UtcNow.AddHours(-1))\n",{"type":51,"tag":66,"props":2075,"children":2077},{"id":2076},"aspnet-core-integration",[2078],{"type":57,"value":2079},"ASP.NET Core Integration",{"type":51,"tag":73,"props":2081,"children":2083},{"className":473,"code":2082,"language":475,"meta":78,"style":78},"\u002F\u002F Program.cs\nusing Azure.Identity;\nusing Azure.Messaging.EventHubs.Producer;\nusing Microsoft.Extensions.Azure;\n\nbuilder.Services.AddAzureClients(clientBuilder =>\n{\n    clientBuilder.AddEventHubProducerClient(\n        builder.Configuration[\"EventHub:FullyQualifiedNamespace\"],\n        builder.Configuration[\"EventHub:Name\"]);\n    \n    clientBuilder.UseCredential(new DefaultAzureCredential());\n});\n\n\u002F\u002F Inject in controller\u002Fservice\npublic class EventService\n{\n    private readonly EventHubProducerClient _producer;\n    \n    public EventService(EventHubProducerClient producer)\n    {\n        _producer = producer;\n    }\n    \n    public async Task SendAsync(string message)\n    {\n        using var batch = await _producer.CreateBatchAsync();\n        batch.TryAdd(new EventData(message));\n        await _producer.SendAsync(batch);\n    }\n}\n",[2084],{"type":51,"tag":81,"props":2085,"children":2086},{"__ignoreMap":78},[2087,2095,2102,2109,2117,2124,2132,2139,2147,2155,2163,2170,2178,2186,2193,2201,2209,2216,2224,2231,2239,2246,2254,2261,2268,2276,2283,2291,2299,2307,2314],{"type":51,"tag":85,"props":2088,"children":2089},{"class":87,"line":88},[2090],{"type":51,"tag":85,"props":2091,"children":2092},{},[2093],{"type":57,"value":2094},"\u002F\u002F Program.cs\n",{"type":51,"tag":85,"props":2096,"children":2097},{"class":87,"line":98},[2098],{"type":51,"tag":85,"props":2099,"children":2100},{},[2101],{"type":57,"value":487},{"type":51,"tag":85,"props":2103,"children":2104},{"class":87,"line":124},[2105],{"type":51,"tag":85,"props":2106,"children":2107},{},[2108],{"type":57,"value":503},{"type":51,"tag":85,"props":2110,"children":2111},{"class":87,"line":134},[2112],{"type":51,"tag":85,"props":2113,"children":2114},{},[2115],{"type":57,"value":2116},"using Microsoft.Extensions.Azure;\n",{"type":51,"tag":85,"props":2118,"children":2119},{"class":87,"line":143},[2120],{"type":51,"tag":85,"props":2121,"children":2122},{"emptyLinePlaceholder":128},[2123],{"type":57,"value":131},{"type":51,"tag":85,"props":2125,"children":2126},{"class":87,"line":164},[2127],{"type":51,"tag":85,"props":2128,"children":2129},{},[2130],{"type":57,"value":2131},"builder.Services.AddAzureClients(clientBuilder =>\n",{"type":51,"tag":85,"props":2133,"children":2134},{"class":87,"line":172},[2135],{"type":51,"tag":85,"props":2136,"children":2137},{},[2138],{"type":57,"value":959},{"type":51,"tag":85,"props":2140,"children":2141},{"class":87,"line":181},[2142],{"type":51,"tag":85,"props":2143,"children":2144},{},[2145],{"type":57,"value":2146},"    clientBuilder.AddEventHubProducerClient(\n",{"type":51,"tag":85,"props":2148,"children":2149},{"class":87,"line":202},[2150],{"type":51,"tag":85,"props":2151,"children":2152},{},[2153],{"type":57,"value":2154},"        builder.Configuration[\"EventHub:FullyQualifiedNamespace\"],\n",{"type":51,"tag":85,"props":2156,"children":2157},{"class":87,"line":210},[2158],{"type":51,"tag":85,"props":2159,"children":2160},{},[2161],{"type":57,"value":2162},"        builder.Configuration[\"EventHub:Name\"]);\n",{"type":51,"tag":85,"props":2164,"children":2165},{"class":87,"line":219},[2166],{"type":51,"tag":85,"props":2167,"children":2168},{},[2169],{"type":57,"value":1652},{"type":51,"tag":85,"props":2171,"children":2172},{"class":87,"line":569},[2173],{"type":51,"tag":85,"props":2174,"children":2175},{},[2176],{"type":57,"value":2177},"    clientBuilder.UseCredential(new DefaultAzureCredential());\n",{"type":51,"tag":85,"props":2179,"children":2180},{"class":87,"line":577},[2181],{"type":51,"tag":85,"props":2182,"children":2183},{},[2184],{"type":57,"value":2185},"});\n",{"type":51,"tag":85,"props":2187,"children":2188},{"class":87,"line":586},[2189],{"type":51,"tag":85,"props":2190,"children":2191},{"emptyLinePlaceholder":128},[2192],{"type":57,"value":131},{"type":51,"tag":85,"props":2194,"children":2195},{"class":87,"line":595},[2196],{"type":51,"tag":85,"props":2197,"children":2198},{},[2199],{"type":57,"value":2200},"\u002F\u002F Inject in controller\u002Fservice\n",{"type":51,"tag":85,"props":2202,"children":2203},{"class":87,"line":603},[2204],{"type":51,"tag":85,"props":2205,"children":2206},{},[2207],{"type":57,"value":2208},"public class EventService\n",{"type":51,"tag":85,"props":2210,"children":2211},{"class":87,"line":612},[2212],{"type":51,"tag":85,"props":2213,"children":2214},{},[2215],{"type":57,"value":959},{"type":51,"tag":85,"props":2217,"children":2218},{"class":87,"line":621},[2219],{"type":51,"tag":85,"props":2220,"children":2221},{},[2222],{"type":57,"value":2223},"    private readonly EventHubProducerClient _producer;\n",{"type":51,"tag":85,"props":2225,"children":2226},{"class":87,"line":630},[2227],{"type":51,"tag":85,"props":2228,"children":2229},{},[2230],{"type":57,"value":1652},{"type":51,"tag":85,"props":2232,"children":2233},{"class":87,"line":993},[2234],{"type":51,"tag":85,"props":2235,"children":2236},{},[2237],{"type":57,"value":2238},"    public EventService(EventHubProducerClient producer)\n",{"type":51,"tag":85,"props":2240,"children":2241},{"class":87,"line":1002},[2242],{"type":51,"tag":85,"props":2243,"children":2244},{},[2245],{"type":57,"value":1025},{"type":51,"tag":85,"props":2247,"children":2248},{"class":87,"line":1010},[2249],{"type":51,"tag":85,"props":2250,"children":2251},{},[2252],{"type":57,"value":2253},"        _producer = producer;\n",{"type":51,"tag":85,"props":2255,"children":2256},{"class":87,"line":1019},[2257],{"type":51,"tag":85,"props":2258,"children":2259},{},[2260],{"type":57,"value":1106},{"type":51,"tag":85,"props":2262,"children":2263},{"class":87,"line":1028},[2264],{"type":51,"tag":85,"props":2265,"children":2266},{},[2267],{"type":57,"value":1652},{"type":51,"tag":85,"props":2269,"children":2270},{"class":87,"line":1037},[2271],{"type":51,"tag":85,"props":2272,"children":2273},{},[2274],{"type":57,"value":2275},"    public async Task SendAsync(string message)\n",{"type":51,"tag":85,"props":2277,"children":2278},{"class":87,"line":1046},[2279],{"type":51,"tag":85,"props":2280,"children":2281},{},[2282],{"type":57,"value":1025},{"type":51,"tag":85,"props":2284,"children":2285},{"class":87,"line":1055},[2286],{"type":51,"tag":85,"props":2287,"children":2288},{},[2289],{"type":57,"value":2290},"        using var batch = await _producer.CreateBatchAsync();\n",{"type":51,"tag":85,"props":2292,"children":2293},{"class":87,"line":1064},[2294],{"type":51,"tag":85,"props":2295,"children":2296},{},[2297],{"type":57,"value":2298},"        batch.TryAdd(new EventData(message));\n",{"type":51,"tag":85,"props":2300,"children":2301},{"class":87,"line":1073},[2302],{"type":51,"tag":85,"props":2303,"children":2304},{},[2305],{"type":57,"value":2306},"        await _producer.SendAsync(batch);\n",{"type":51,"tag":85,"props":2308,"children":2309},{"class":87,"line":1082},[2310],{"type":51,"tag":85,"props":2311,"children":2312},{},[2313],{"type":57,"value":1106},{"type":51,"tag":85,"props":2315,"children":2316},{"class":87,"line":1091},[2317],{"type":51,"tag":85,"props":2318,"children":2319},{},[2320],{"type":57,"value":1115},{"type":51,"tag":66,"props":2322,"children":2324},{"id":2323},"best-practices",[2325],{"type":57,"value":2326},"Best Practices",{"type":51,"tag":2328,"props":2329,"children":2330},"ol",{},[2331,2355,2365,2375,2385,2400,2416,2434],{"type":51,"tag":652,"props":2332,"children":2333},{},[2334,2346,2348,2353],{"type":51,"tag":242,"props":2335,"children":2336},{},[2337,2339,2344],{"type":57,"value":2338},"Use ",{"type":51,"tag":81,"props":2340,"children":2342},{"className":2341},[],[2343],{"type":57,"value":814},{"type":57,"value":2345}," for receiving",{"type":57,"value":2347}," — Never use ",{"type":51,"tag":81,"props":2349,"children":2351},{"className":2350},[],[2352],{"type":57,"value":792},{"type":57,"value":2354}," in production",{"type":51,"tag":652,"props":2356,"children":2357},{},[2358,2363],{"type":51,"tag":242,"props":2359,"children":2360},{},[2361],{"type":57,"value":2362},"Checkpoint strategically",{"type":57,"value":2364}," — After N events or time interval, not every event",{"type":51,"tag":652,"props":2366,"children":2367},{},[2368,2373],{"type":51,"tag":242,"props":2369,"children":2370},{},[2371],{"type":57,"value":2372},"Use partition keys",{"type":57,"value":2374}," — For ordering guarantees within a partition",{"type":51,"tag":652,"props":2376,"children":2377},{},[2378,2383],{"type":51,"tag":242,"props":2379,"children":2380},{},[2381],{"type":57,"value":2382},"Reuse clients",{"type":57,"value":2384}," — Create once, use as singleton (thread-safe)",{"type":51,"tag":652,"props":2386,"children":2387},{},[2388,2398],{"type":51,"tag":242,"props":2389,"children":2390},{},[2391,2392],{"type":57,"value":2338},{"type":51,"tag":81,"props":2393,"children":2395},{"className":2394},[],[2396],{"type":57,"value":2397},"await using",{"type":57,"value":2399}," — Ensures proper disposal",{"type":51,"tag":652,"props":2401,"children":2402},{},[2403,2414],{"type":51,"tag":242,"props":2404,"children":2405},{},[2406,2408],{"type":57,"value":2407},"Handle ",{"type":51,"tag":81,"props":2409,"children":2411},{"className":2410},[],[2412],{"type":57,"value":2413},"ProcessErrorAsync",{"type":57,"value":2415}," — Always register error handler",{"type":51,"tag":652,"props":2417,"children":2418},{},[2419,2424,2426,2432],{"type":51,"tag":242,"props":2420,"children":2421},{},[2422],{"type":57,"value":2423},"Batch events",{"type":57,"value":2425}," — Use ",{"type":51,"tag":81,"props":2427,"children":2429},{"className":2428},[],[2430],{"type":57,"value":2431},"CreateBatchAsync()",{"type":57,"value":2433}," to respect size limits",{"type":51,"tag":652,"props":2435,"children":2436},{},[2437,2442],{"type":51,"tag":242,"props":2438,"children":2439},{},[2440],{"type":57,"value":2441},"Use buffered producer",{"type":57,"value":2443}," — For high-volume scenarios with automatic batching",{"type":51,"tag":66,"props":2445,"children":2447},{"id":2446},"error-handling",[2448],{"type":57,"value":2449},"Error Handling",{"type":51,"tag":73,"props":2451,"children":2453},{"className":473,"code":2452,"language":475,"meta":78,"style":78},"using Azure.Messaging.EventHubs;\n\ntry\n{\n    await producer.SendAsync(batch);\n}\ncatch (EventHubsException ex) when (ex.Reason == EventHubsException.FailureReason.ServiceBusy)\n{\n    \u002F\u002F Retry with backoff\n    await Task.Delay(TimeSpan.FromSeconds(5));\n}\ncatch (EventHubsException ex) when (ex.IsTransient)\n{\n    \u002F\u002F Transient error - safe to retry\n    Console.WriteLine($\"Transient error: {ex.Message}\");\n}\ncatch (EventHubsException ex)\n{\n    \u002F\u002F Non-transient error\n    Console.WriteLine($\"Error: {ex.Reason} - {ex.Message}\");\n}\n",[2454],{"type":51,"tag":81,"props":2455,"children":2456},{"__ignoreMap":78},[2457,2464,2471,2479,2486,2493,2500,2508,2515,2523,2531,2538,2546,2553,2561,2569,2576,2584,2591,2599,2607],{"type":51,"tag":85,"props":2458,"children":2459},{"class":87,"line":88},[2460],{"type":51,"tag":85,"props":2461,"children":2462},{},[2463],{"type":57,"value":495},{"type":51,"tag":85,"props":2465,"children":2466},{"class":87,"line":98},[2467],{"type":51,"tag":85,"props":2468,"children":2469},{"emptyLinePlaceholder":128},[2470],{"type":57,"value":131},{"type":51,"tag":85,"props":2472,"children":2473},{"class":87,"line":124},[2474],{"type":51,"tag":85,"props":2475,"children":2476},{},[2477],{"type":57,"value":2478},"try\n",{"type":51,"tag":85,"props":2480,"children":2481},{"class":87,"line":134},[2482],{"type":51,"tag":85,"props":2483,"children":2484},{},[2485],{"type":57,"value":959},{"type":51,"tag":85,"props":2487,"children":2488},{"class":87,"line":143},[2489],{"type":51,"tag":85,"props":2490,"children":2491},{},[2492],{"type":57,"value":1158},{"type":51,"tag":85,"props":2494,"children":2495},{"class":87,"line":164},[2496],{"type":51,"tag":85,"props":2497,"children":2498},{},[2499],{"type":57,"value":1115},{"type":51,"tag":85,"props":2501,"children":2502},{"class":87,"line":172},[2503],{"type":51,"tag":85,"props":2504,"children":2505},{},[2506],{"type":57,"value":2507},"catch (EventHubsException ex) when (ex.Reason == EventHubsException.FailureReason.ServiceBusy)\n",{"type":51,"tag":85,"props":2509,"children":2510},{"class":87,"line":181},[2511],{"type":51,"tag":85,"props":2512,"children":2513},{},[2514],{"type":57,"value":959},{"type":51,"tag":85,"props":2516,"children":2517},{"class":87,"line":202},[2518],{"type":51,"tag":85,"props":2519,"children":2520},{},[2521],{"type":57,"value":2522},"    \u002F\u002F Retry with backoff\n",{"type":51,"tag":85,"props":2524,"children":2525},{"class":87,"line":210},[2526],{"type":51,"tag":85,"props":2527,"children":2528},{},[2529],{"type":57,"value":2530},"    await Task.Delay(TimeSpan.FromSeconds(5));\n",{"type":51,"tag":85,"props":2532,"children":2533},{"class":87,"line":219},[2534],{"type":51,"tag":85,"props":2535,"children":2536},{},[2537],{"type":57,"value":1115},{"type":51,"tag":85,"props":2539,"children":2540},{"class":87,"line":569},[2541],{"type":51,"tag":85,"props":2542,"children":2543},{},[2544],{"type":57,"value":2545},"catch (EventHubsException ex) when (ex.IsTransient)\n",{"type":51,"tag":85,"props":2547,"children":2548},{"class":87,"line":577},[2549],{"type":51,"tag":85,"props":2550,"children":2551},{},[2552],{"type":57,"value":959},{"type":51,"tag":85,"props":2554,"children":2555},{"class":87,"line":586},[2556],{"type":51,"tag":85,"props":2557,"children":2558},{},[2559],{"type":57,"value":2560},"    \u002F\u002F Transient error - safe to retry\n",{"type":51,"tag":85,"props":2562,"children":2563},{"class":87,"line":595},[2564],{"type":51,"tag":85,"props":2565,"children":2566},{},[2567],{"type":57,"value":2568},"    Console.WriteLine($\"Transient error: {ex.Message}\");\n",{"type":51,"tag":85,"props":2570,"children":2571},{"class":87,"line":603},[2572],{"type":51,"tag":85,"props":2573,"children":2574},{},[2575],{"type":57,"value":1115},{"type":51,"tag":85,"props":2577,"children":2578},{"class":87,"line":612},[2579],{"type":51,"tag":85,"props":2580,"children":2581},{},[2582],{"type":57,"value":2583},"catch (EventHubsException ex)\n",{"type":51,"tag":85,"props":2585,"children":2586},{"class":87,"line":621},[2587],{"type":51,"tag":85,"props":2588,"children":2589},{},[2590],{"type":57,"value":959},{"type":51,"tag":85,"props":2592,"children":2593},{"class":87,"line":630},[2594],{"type":51,"tag":85,"props":2595,"children":2596},{},[2597],{"type":57,"value":2598},"    \u002F\u002F Non-transient error\n",{"type":51,"tag":85,"props":2600,"children":2601},{"class":87,"line":993},[2602],{"type":51,"tag":85,"props":2603,"children":2604},{},[2605],{"type":57,"value":2606},"    Console.WriteLine($\"Error: {ex.Reason} - {ex.Message}\");\n",{"type":51,"tag":85,"props":2608,"children":2609},{"class":87,"line":1002},[2610],{"type":51,"tag":85,"props":2611,"children":2612},{},[2613],{"type":57,"value":1115},{"type":51,"tag":66,"props":2615,"children":2617},{"id":2616},"checkpointing-strategies",[2618],{"type":57,"value":2619},"Checkpointing Strategies",{"type":51,"tag":705,"props":2621,"children":2622},{},[2623,2638],{"type":51,"tag":709,"props":2624,"children":2625},{},[2626],{"type":51,"tag":713,"props":2627,"children":2628},{},[2629,2634],{"type":51,"tag":717,"props":2630,"children":2631},{},[2632],{"type":57,"value":2633},"Strategy",{"type":51,"tag":717,"props":2635,"children":2636},{},[2637],{"type":57,"value":731},{"type":51,"tag":733,"props":2639,"children":2640},{},[2641,2654,2667,2680],{"type":51,"tag":713,"props":2642,"children":2643},{},[2644,2649],{"type":51,"tag":740,"props":2645,"children":2646},{},[2647],{"type":57,"value":2648},"Every event",{"type":51,"tag":740,"props":2650,"children":2651},{},[2652],{"type":57,"value":2653},"Low volume, critical data",{"type":51,"tag":713,"props":2655,"children":2656},{},[2657,2662],{"type":51,"tag":740,"props":2658,"children":2659},{},[2660],{"type":57,"value":2661},"Every N events",{"type":51,"tag":740,"props":2663,"children":2664},{},[2665],{"type":57,"value":2666},"Balanced throughput\u002Freliability",{"type":51,"tag":713,"props":2668,"children":2669},{},[2670,2675],{"type":51,"tag":740,"props":2671,"children":2672},{},[2673],{"type":57,"value":2674},"Time-based",{"type":51,"tag":740,"props":2676,"children":2677},{},[2678],{"type":57,"value":2679},"Consistent checkpoint intervals",{"type":51,"tag":713,"props":2681,"children":2682},{},[2683,2688],{"type":51,"tag":740,"props":2684,"children":2685},{},[2686],{"type":57,"value":2687},"Batch completion",{"type":51,"tag":740,"props":2689,"children":2690},{},[2691],{"type":57,"value":2692},"After processing a logical batch",{"type":51,"tag":73,"props":2694,"children":2696},{"className":473,"code":2695,"language":475,"meta":78,"style":78},"\u002F\u002F Checkpoint every 100 events\nprivate int _eventCount = 0;\n\nprocessor.ProcessEventAsync += async args =>\n{\n    \u002F\u002F Process event...\n    \n    _eventCount++;\n    if (_eventCount >= 100)\n    {\n        await args.UpdateCheckpointAsync();\n        _eventCount = 0;\n    }\n};\n",[2697],{"type":51,"tag":81,"props":2698,"children":2699},{"__ignoreMap":78},[2700,2708,2716,2723,2730,2737,2745,2752,2760,2768,2775,2783,2791,2798],{"type":51,"tag":85,"props":2701,"children":2702},{"class":87,"line":88},[2703],{"type":51,"tag":85,"props":2704,"children":2705},{},[2706],{"type":57,"value":2707},"\u002F\u002F Checkpoint every 100 events\n",{"type":51,"tag":85,"props":2709,"children":2710},{"class":87,"line":98},[2711],{"type":51,"tag":85,"props":2712,"children":2713},{},[2714],{"type":57,"value":2715},"private int _eventCount = 0;\n",{"type":51,"tag":85,"props":2717,"children":2718},{"class":87,"line":124},[2719],{"type":51,"tag":85,"props":2720,"children":2721},{"emptyLinePlaceholder":128},[2722],{"type":57,"value":131},{"type":51,"tag":85,"props":2724,"children":2725},{"class":87,"line":134},[2726],{"type":51,"tag":85,"props":2727,"children":2728},{},[2729],{"type":57,"value":1621},{"type":51,"tag":85,"props":2731,"children":2732},{"class":87,"line":143},[2733],{"type":51,"tag":85,"props":2734,"children":2735},{},[2736],{"type":57,"value":959},{"type":51,"tag":85,"props":2738,"children":2739},{"class":87,"line":164},[2740],{"type":51,"tag":85,"props":2741,"children":2742},{},[2743],{"type":57,"value":2744},"    \u002F\u002F Process event...\n",{"type":51,"tag":85,"props":2746,"children":2747},{"class":87,"line":172},[2748],{"type":51,"tag":85,"props":2749,"children":2750},{},[2751],{"type":57,"value":1652},{"type":51,"tag":85,"props":2753,"children":2754},{"class":87,"line":181},[2755],{"type":51,"tag":85,"props":2756,"children":2757},{},[2758],{"type":57,"value":2759},"    _eventCount++;\n",{"type":51,"tag":85,"props":2761,"children":2762},{"class":87,"line":202},[2763],{"type":51,"tag":85,"props":2764,"children":2765},{},[2766],{"type":57,"value":2767},"    if (_eventCount >= 100)\n",{"type":51,"tag":85,"props":2769,"children":2770},{"class":87,"line":210},[2771],{"type":51,"tag":85,"props":2772,"children":2773},{},[2774],{"type":57,"value":1025},{"type":51,"tag":85,"props":2776,"children":2777},{"class":87,"line":219},[2778],{"type":51,"tag":85,"props":2779,"children":2780},{},[2781],{"type":57,"value":2782},"        await args.UpdateCheckpointAsync();\n",{"type":51,"tag":85,"props":2784,"children":2785},{"class":87,"line":569},[2786],{"type":51,"tag":85,"props":2787,"children":2788},{},[2789],{"type":57,"value":2790},"        _eventCount = 0;\n",{"type":51,"tag":85,"props":2792,"children":2793},{"class":87,"line":577},[2794],{"type":51,"tag":85,"props":2795,"children":2796},{},[2797],{"type":57,"value":1106},{"type":51,"tag":85,"props":2799,"children":2800},{"class":87,"line":586},[2801],{"type":51,"tag":85,"props":2802,"children":2803},{},[2804],{"type":57,"value":983},{"type":51,"tag":66,"props":2806,"children":2808},{"id":2807},"related-sdks",[2809],{"type":57,"value":2810},"Related SDKs",{"type":51,"tag":705,"props":2812,"children":2813},{},[2814,2834],{"type":51,"tag":709,"props":2815,"children":2816},{},[2817],{"type":51,"tag":713,"props":2818,"children":2819},{},[2820,2825,2829],{"type":51,"tag":717,"props":2821,"children":2822},{},[2823],{"type":57,"value":2824},"SDK",{"type":51,"tag":717,"props":2826,"children":2827},{},[2828],{"type":57,"value":726},{"type":51,"tag":717,"props":2830,"children":2831},{},[2832],{"type":57,"value":2833},"Install",{"type":51,"tag":733,"props":2835,"children":2836},{},[2837,2862,2888,2914],{"type":51,"tag":713,"props":2838,"children":2839},{},[2840,2848,2853],{"type":51,"tag":740,"props":2841,"children":2842},{},[2843],{"type":51,"tag":81,"props":2844,"children":2846},{"className":2845},[],[2847],{"type":57,"value":46},{"type":51,"tag":740,"props":2849,"children":2850},{},[2851],{"type":57,"value":2852},"Core sending\u002Freceiving",{"type":51,"tag":740,"props":2854,"children":2855},{},[2856],{"type":51,"tag":81,"props":2857,"children":2859},{"className":2858},[],[2860],{"type":57,"value":2861},"dotnet add package Azure.Messaging.EventHubs",{"type":51,"tag":713,"props":2863,"children":2864},{},[2865,2874,2879],{"type":51,"tag":740,"props":2866,"children":2867},{},[2868],{"type":51,"tag":81,"props":2869,"children":2871},{"className":2870},[],[2872],{"type":57,"value":2873},"Azure.Messaging.EventHubs.Processor",{"type":51,"tag":740,"props":2875,"children":2876},{},[2877],{"type":57,"value":2878},"Production processing",{"type":51,"tag":740,"props":2880,"children":2881},{},[2882],{"type":51,"tag":81,"props":2883,"children":2885},{"className":2884},[],[2886],{"type":57,"value":2887},"dotnet add package Azure.Messaging.EventHubs.Processor",{"type":51,"tag":713,"props":2889,"children":2890},{},[2891,2900,2905],{"type":51,"tag":740,"props":2892,"children":2893},{},[2894],{"type":51,"tag":81,"props":2895,"children":2897},{"className":2896},[],[2898],{"type":57,"value":2899},"Azure.ResourceManager.EventHubs",{"type":51,"tag":740,"props":2901,"children":2902},{},[2903],{"type":57,"value":2904},"Management plane (create hubs)",{"type":51,"tag":740,"props":2906,"children":2907},{},[2908],{"type":51,"tag":81,"props":2909,"children":2911},{"className":2910},[],[2912],{"type":57,"value":2913},"dotnet add package Azure.ResourceManager.EventHubs",{"type":51,"tag":713,"props":2915,"children":2916},{},[2917,2926,2931],{"type":51,"tag":740,"props":2918,"children":2919},{},[2920],{"type":51,"tag":81,"props":2921,"children":2923},{"className":2922},[],[2924],{"type":57,"value":2925},"Microsoft.Azure.WebJobs.Extensions.EventHubs",{"type":51,"tag":740,"props":2927,"children":2928},{},[2929],{"type":57,"value":2930},"Azure Functions binding",{"type":51,"tag":740,"props":2932,"children":2933},{},[2934],{"type":51,"tag":81,"props":2935,"children":2937},{"className":2936},[],[2938],{"type":57,"value":2939},"dotnet add package Microsoft.Azure.WebJobs.Extensions.EventHubs",{"type":51,"tag":2941,"props":2942,"children":2943},"style",{},[2944],{"type":57,"value":2945},"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":2947,"total":1152},[2948,2962,2983,2998,3015,3026,3039],{"slug":2949,"name":2949,"fn":2950,"description":2951,"org":2952,"tags":2953,"stars":25,"repoUrl":26,"updatedAt":2961},"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},[2954,2955,2957,2958],{"name":20,"slug":21,"type":15},{"name":2956,"slug":32,"type":15},"Agents",{"name":13,"slug":14,"type":15},{"name":2959,"slug":2960,"type":15},"LLM","llm","2026-07-03T16:32:10.297433",{"slug":2963,"name":2963,"fn":2964,"description":2965,"org":2966,"tags":2967,"stars":25,"repoUrl":26,"updatedAt":2982},"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},[2968,2971,2972,2975,2978,2979],{"name":2969,"slug":2970,"type":15},"Analytics","analytics",{"name":13,"slug":14,"type":15},{"name":2973,"slug":2974,"type":15},"Data Analysis","data-analysis",{"name":2976,"slug":2977,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":2980,"slug":2981,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":2984,"name":2984,"fn":2985,"description":2986,"org":2987,"tags":2988,"stars":25,"repoUrl":26,"updatedAt":2997},"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},[2989,2992,2993,2994],{"name":2990,"slug":2991,"type":15},"AI Infrastructure","ai-infrastructure",{"name":13,"slug":14,"type":15},{"name":2976,"slug":2977,"type":15},{"name":2995,"slug":2996,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":2999,"name":2999,"fn":3000,"description":3001,"org":3002,"tags":3003,"stars":25,"repoUrl":26,"updatedAt":3014},"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},[3004,3005,3008,3009,3010,3013],{"name":13,"slug":14,"type":15},{"name":3006,"slug":3007,"type":15},"Compliance","compliance",{"name":2959,"slug":2960,"type":15},{"name":9,"slug":8,"type":15},{"name":3011,"slug":3012,"type":15},"Python","python",{"name":2995,"slug":2996,"type":15},"2026-07-18T05:14:23.017504",{"slug":3016,"name":3016,"fn":3017,"description":3018,"org":3019,"tags":3020,"stars":25,"repoUrl":26,"updatedAt":3025},"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},[3021,3022,3023,3024],{"name":2969,"slug":2970,"type":15},{"name":13,"slug":14,"type":15},{"name":2959,"slug":2960,"type":15},{"name":3011,"slug":3012,"type":15},"2026-07-31T05:54:29.068751",{"slug":3027,"name":3027,"fn":3028,"description":3029,"org":3030,"tags":3031,"stars":25,"repoUrl":26,"updatedAt":3038},"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},[3032,3035,3036,3037],{"name":3033,"slug":3034,"type":15},"API Development","api-development",{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":3011,"slug":3012,"type":15},"2026-07-18T05:14:16.988376",{"slug":3040,"name":3040,"fn":3041,"description":3042,"org":3043,"tags":3044,"stars":25,"repoUrl":26,"updatedAt":3053},"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},[3045,3046,3049,3052],{"name":13,"slug":14,"type":15},{"name":3047,"slug":3048,"type":15},"Computer Vision","computer-vision",{"name":3050,"slug":3051,"type":15},"Images","images",{"name":3011,"slug":3012,"type":15},"2026-07-18T05:14:18.007737",{"items":3055,"total":3190},[3056,3078,3085,3094,3101,3110,3117,3124,3131,3146,3165,3178],{"slug":3057,"name":3057,"fn":3058,"description":3059,"org":3060,"tags":3061,"stars":3075,"repoUrl":3076,"updatedAt":3077},"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},[3062,3065,3068,3069,3072],{"name":3063,"slug":3064,"type":15},"Engineering","engineering",{"name":3066,"slug":3067,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":3070,"slug":3071,"type":15},"Project Management","project-management",{"name":3073,"slug":3074,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":2949,"name":2949,"fn":2950,"description":2951,"org":3079,"tags":3080,"stars":25,"repoUrl":26,"updatedAt":2961},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3081,3082,3083,3084],{"name":20,"slug":21,"type":15},{"name":2956,"slug":32,"type":15},{"name":13,"slug":14,"type":15},{"name":2959,"slug":2960,"type":15},{"slug":2963,"name":2963,"fn":2964,"description":2965,"org":3086,"tags":3087,"stars":25,"repoUrl":26,"updatedAt":2982},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3088,3089,3090,3091,3092,3093],{"name":2969,"slug":2970,"type":15},{"name":13,"slug":14,"type":15},{"name":2973,"slug":2974,"type":15},{"name":2976,"slug":2977,"type":15},{"name":9,"slug":8,"type":15},{"name":2980,"slug":2981,"type":15},{"slug":2984,"name":2984,"fn":2985,"description":2986,"org":3095,"tags":3096,"stars":25,"repoUrl":26,"updatedAt":2997},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3097,3098,3099,3100],{"name":2990,"slug":2991,"type":15},{"name":13,"slug":14,"type":15},{"name":2976,"slug":2977,"type":15},{"name":2995,"slug":2996,"type":15},{"slug":2999,"name":2999,"fn":3000,"description":3001,"org":3102,"tags":3103,"stars":25,"repoUrl":26,"updatedAt":3014},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3104,3105,3106,3107,3108,3109],{"name":13,"slug":14,"type":15},{"name":3006,"slug":3007,"type":15},{"name":2959,"slug":2960,"type":15},{"name":9,"slug":8,"type":15},{"name":3011,"slug":3012,"type":15},{"name":2995,"slug":2996,"type":15},{"slug":3016,"name":3016,"fn":3017,"description":3018,"org":3111,"tags":3112,"stars":25,"repoUrl":26,"updatedAt":3025},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3113,3114,3115,3116],{"name":2969,"slug":2970,"type":15},{"name":13,"slug":14,"type":15},{"name":2959,"slug":2960,"type":15},{"name":3011,"slug":3012,"type":15},{"slug":3027,"name":3027,"fn":3028,"description":3029,"org":3118,"tags":3119,"stars":25,"repoUrl":26,"updatedAt":3038},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3120,3121,3122,3123],{"name":3033,"slug":3034,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":3011,"slug":3012,"type":15},{"slug":3040,"name":3040,"fn":3041,"description":3042,"org":3125,"tags":3126,"stars":25,"repoUrl":26,"updatedAt":3053},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3127,3128,3129,3130],{"name":13,"slug":14,"type":15},{"name":3047,"slug":3048,"type":15},{"name":3050,"slug":3051,"type":15},{"name":3011,"slug":3012,"type":15},{"slug":3132,"name":3132,"fn":3133,"description":3134,"org":3135,"tags":3136,"stars":25,"repoUrl":26,"updatedAt":3145},"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},[3137,3138,3141,3144],{"name":13,"slug":14,"type":15},{"name":3139,"slug":3140,"type":15},"Configuration","configuration",{"name":3142,"slug":3143,"type":15},"Feature Flags","feature-flags",{"name":2976,"slug":2977,"type":15},"2026-07-03T16:32:01.278468",{"slug":3147,"name":3147,"fn":3148,"description":3149,"org":3150,"tags":3151,"stars":25,"repoUrl":26,"updatedAt":3164},"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},[3152,3155,3158,3161],{"name":3153,"slug":3154,"type":15},"Cosmos DB","cosmos-db",{"name":3156,"slug":3157,"type":15},"Database","database",{"name":3159,"slug":3160,"type":15},"NoSQL","nosql",{"name":3162,"slug":3163,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":3166,"name":3166,"fn":3148,"description":3167,"org":3168,"tags":3169,"stars":25,"repoUrl":26,"updatedAt":3177},"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},[3170,3171,3172,3173,3174],{"name":3153,"slug":3154,"type":15},{"name":3156,"slug":3157,"type":15},{"name":9,"slug":8,"type":15},{"name":3159,"slug":3160,"type":15},{"name":3175,"slug":3176,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":3179,"name":3179,"fn":3180,"description":3181,"org":3182,"tags":3183,"stars":25,"repoUrl":26,"updatedAt":3189},"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},[3184,3185,3186,3187,3188],{"name":13,"slug":14,"type":15},{"name":3153,"slug":3154,"type":15},{"name":3156,"slug":3157,"type":15},{"name":2976,"slug":2977,"type":15},{"name":3159,"slug":3160,"type":15},"2026-05-13T06:14:17.582229",267]