Franz.Common.Messaging.AzureEventHubs
1.7.5
dotnet add package Franz.Common.Messaging.AzureEventHubs --version 1.7.5
NuGet\Install-Package Franz.Common.Messaging.AzureEventHubs -Version 1.7.5
<PackageReference Include="Franz.Common.Messaging.AzureEventHubs" Version="1.7.5" />
<PackageVersion Include="Franz.Common.Messaging.AzureEventHubs" Version="1.7.5" />
<PackageReference Include="Franz.Common.Messaging.AzureEventHubs" />
paket add Franz.Common.Messaging.AzureEventHubs --version 1.7.5
#r "nuget: Franz.Common.Messaging.AzureEventHubs, 1.7.5"
#:package Franz.Common.Messaging.AzureEventHubs@1.7.5
#addin nuget:?package=Franz.Common.Messaging.AzureEventHubs&version=1.7.5
#tool nuget:?package=Franz.Common.Messaging.AzureEventHubs&version=1.7.5
Franz.Common.Messaging.AzureEventHubs
Franz.Common.Messaging.AzureEventHubs is the Azure Event Hubs streaming transport adapter for the Franz Framework messaging stack.
It provides high-throughput, partitioned, Kafka-style event streaming backed by Azure Event Hubs, while preserving all Franz architectural guarantees:
- mediator-driven execution
- deterministic metadata propagation
- transport isolation
- cloud-native scalability
- consistent observability
This package is the streaming counterpart to:
Franz.Common.Messaging.KafkaFranz.Common.Messaging.AzureEventBus(Azure Service Bus)Franz.Common.Messaging.AzureEventGrid
✨ Features
🟦 Azure Event Hubs Streaming
- Native integration with Azure Event Hubs
- Partitioned, high-throughput event ingestion
- Consumer-group based scaling
- Azure-managed partition balancing
- Blob-based checkpointing
🧠 Franz-Native Semantics
- Uses Franz.Common.Messaging envelopes
- Dispatches messages through Franz.Common.Mediator
- No business logic at the transport layer
- Deterministic propagation of correlation and metadata
- Kafka-parity execution model
🧩 Explicit Mapping Layer (No AutoMapper)
Uses Franz.Common.Mapping
Single, authoritative transport boundary:
- Azure Event Hubs → Franz
Message
- Azure Event Hubs → Franz
No reflection magic
Auditable, version-safe mappings
🔁 Reliability & Checkpointing
- Uses Azure Blob Storage for checkpoints
- Checkpoints updated only after successful mediator dispatch
- At-least-once delivery semantics
- Fully Azure-native retry and failure handling
📊 Observability & Diagnostics
- Integrated with Franz.Common.Logging
- Structured logs with Franz conventions
- Partition, offset, and sequence number propagation
- OpenTelemetry compatible (via mediator pipelines)
📦 Dependencies
This package intentionally depends only on core Franz building blocks and Azure SDKs:
Franz.Common.Messaging
Franz.Common.Mediator
Franz.Common.Logging
Franz.Common.Errors
Franz.Common.Headers
Franz.Common.Mapping
Franz.Common.Serialization
Azure.Messaging.EventHubs
Azure.Messaging.EventHubs.Processor
Azure.Storage.Blobs
❌ No HTTP ❌ No ASP.NET dependencies ❌ No hosting logic ❌ No pull-based consumer APIs
📂 Project Structure
Franz.Common.Messaging.AzureEventHubs/
├── Configuration/
│ └── AzureEventHubsOptions.cs
│
├── Constants/
│ └── AzureEventHubsHeaders.cs
│
├── Consumers/
│ └── AzureEventHubsProcessor.cs
│
├── Producers/
│ └── AzureEventHubsProducer.cs
│
├── Mapping/
│ └── AzureEventHubsMessageMapper.cs
│
├── Serialization/
│ └── AzureEventHubsMessageSerializer.cs
│
├── Infrastructure/
│ ├── EventHubClientFactory.cs
│ └── EventHubProcessorFactory.cs
│
├── DependencyInjection/
│ └── AzureEventHubsServiceCollectionExtensions.cs
│
└── README.md
⚙️ Configuration
Configuration is explicit and strongly typed (no magic strings, no IConfiguration coupling):
services.AddFranzAzureEventHubs(options =>
{
options.ConnectionString = "<event-hubs-connection-string>";
options.EventHubName = "orders-stream";
options.ConsumerGroup = "$Default";
options.BlobConnectionString = "<storage-connection-string>";
options.BlobContainerName = "eventhubs-checkpoints";
});
🔄 Message Flow
Consumer (Streaming)
Azure Event Hubs receives an event
EventProcessorClientpushes the event to the processorEvent mapped to a Franz
MessageMessage dispatched through Franz.Mediator
On success:
- Blob checkpoint updated
On failure:
- Event retried by Azure Event Hubs
Producer
- Franz message published
- Payload serialized using Franz serialization
- Event sent via
EventHubProducerClient - Partitioning handled by Azure
📊 Header Mapping
| Franz Header | Azure Event Hubs Source |
|---|---|
| MessageId | EventData.MessageId |
| CorrelationId | EventData.CorrelationId |
| PartitionId | Processor context |
| SequenceNumber | EventData.SequenceNumber |
| Offset | EventData.Offset |
| EnqueuedTime | EventData.EnqueuedTime |
All headers are defined in AzureEventHubsHeaders.
🚀 Extensibility
This package is designed to evolve without breaking contracts:
- Custom partitioning strategies
- Schema evolution support
- Outbox integration
- Multi-hub consumption
- Advanced checkpoint policies
Hosting and orchestration are handled separately in a future package:
Franz.Common.Messaging.Azure.Hosting
📝 Version Information
- Current Version: 1.7.5
- Target Framework: .NET 10
- Part of the Franz Framework
📜 License
MIT License — see LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Azure.Messaging.EventHubs (>= 5.12.2)
- Azure.Messaging.EventHubs.Processor (>= 5.12.2)
- Azure.Storage.Blobs (>= 12.27.0)
- Franz.Common.Errors (>= 1.7.5)
- Franz.Common.Headers (>= 1.7.5)
- Franz.Common.Logging (>= 1.7.5)
- Franz.Common.Mapping (>= 1.7.5)
- Franz.Common.Mediator (>= 1.7.5)
- Franz.Common.Messaging (>= 1.7.5)
- Franz.Common.Serialization (>= 1.7.5)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Franz.Common.Messaging.AzureEventHubs:
| Package | Downloads |
|---|---|
|
Franz.Common.Messaging.Hosting.Azure
Shared utility library for the Franz Framework. |
GitHub repositories
This package is not used by any popular GitHub repositories.