Franz.Common.Messaging.AzureEventBus
2.2.16
dotnet add package Franz.Common.Messaging.AzureEventBus --version 2.2.16
NuGet\Install-Package Franz.Common.Messaging.AzureEventBus -Version 2.2.16
<PackageReference Include="Franz.Common.Messaging.AzureEventBus" Version="2.2.16" />
<PackageVersion Include="Franz.Common.Messaging.AzureEventBus" Version="2.2.16" />Directory.Packages.props
<PackageReference Include="Franz.Common.Messaging.AzureEventBus" />Project file
paket add Franz.Common.Messaging.AzureEventBus --version 2.2.16
#r "nuget: Franz.Common.Messaging.AzureEventBus, 2.2.16"
#:package Franz.Common.Messaging.AzureEventBus@2.2.16
#addin nuget:?package=Franz.Common.Messaging.AzureEventBus&version=2.2.16Install as a Cake Addin
#tool nuget:?package=Franz.Common.Messaging.AzureEventBus&version=2.2.16Install as a Cake Tool
Franz.Common.Messaging.AzureEventBus
Franz.Common.Messaging.AzureEventBus is the Azure Service Bus transport adapter for the Franz Framework messaging stack.
It implements Franz messaging abstractions to provide durable, reliable, and mediator-driven event delivery using Azure Service Bus Topics & Subscriptions, while preserving all Franz guarantees:
- deterministic metadata
- mediator pipelines
- structured logging
- retry & dead-letter semantics
- transport isolation
This package is the Azure equivalent of:
Franz.Common.Messaging.KafkaFranz.Common.Messaging.RabbitMQ
π¦ Azure Service Bus Transport
- Native integration with Azure Service Bus
- Topic / Subscription model
- Queue support (for commands, if enabled)
- Azure-native retry & DLQ semantics
π§ Franz-Native Semantics
- Uses Franz.Common.Messaging abstractions
- Dispatches messages through Franz.Common.Mediator
- Fully compatible with Franz outbox / inbox patterns
- Deterministic correlation & causation propagation
π§© Explicit Mapping Layer (No AutoMapper)
Uses Franz.Common.Mapping
Single authoritative translation layer:
- Franz message β Service Bus message
No reflection magic
Version-safe & auditable mappings
π Retry & Dead Letter Handling
Retries handled by Azure Service Bus delivery counts
Explicit dead-letter routing for:
- Deserialization failures
- Validation errors
- Poison messages
Clear separation between business failure and transport failure
π Observability & Diagnostics
- Integrated with Franz.Common.Logging
- Structured logs with Franz conventions
- CorrelationId & MessageId propagation
- Compatible with OpenTelemetry (via mediator pipelines)
π¦ Dependencies
This package intentionally depends only on core Franz building blocks:
Franz.Common.Messaging
Franz.Common.Mediator
Franz.Common.Mediator.Polly
Franz.Common.Logging
Franz.Common.Errors
Franz.Common.Headers
Franz.Common.Mapping
Franz.Common.Serialization
Azure.Messaging.ServiceBus
β No HTTP β No hosting logic β No business dependencies β No AutoMapper β βββ AzureEventBusOptions.cs β βββ Constants/ β βββ AzureEventBusHeaders.cs β βββ Producers/ β βββ AzureEventBusProducer.cs β βββ Consumers/ β βββ AzureEventBusConsumer.cs β βββ AzureEventBusProcessor.cs β βββ Mapping/ β βββ AzureEventBusMessageMapper.cs β βββ Infrastructure/ β βββ ServiceBusClientFactory.cs β βββ ServiceBusSenderFactory.cs β βββ ServiceBusProcessorFactory.cs β βββ DependencyInjection/ β βββ ServiceCollectionExtensions.cs β βββ README.md
## βοΈ Configuration
```csharp
services.AddFranzAzureEventBus(options =>
{
options.ConnectionString = "<service-bus-connection-string>";
options.Namespace = "my-namespace";
options.Retry.MaxDeliveryCount = 10;
options.DeadLetter.Enabled = true;
});
Configuration is explicit and strongly typed β no magic strings.
"Messaging": {
"BootstrapServers": "localhost:9092",
"GroupId": "my-service",
"OutboxCollection": "OutboxMessages",
"DeadLetterCollection": "DeadLetterMessages",
"InboxCollection": "InboxMessages"
}
β‘ Dependency Injection
builder.Services.AddFranzAzureEventBus(options β { options.ConnectionString = configuration["Azure:ServiceBus"]; });
This registers:
* `ServiceBusClient`
* `AzureEventBusProducer`
* `AzureEventBusProcessor`
* Mapping & serialization components
β οΈ **Hosting is intentionally NOT included**
See `Franz.Common.Messaging.Azure.Hosting` (planned) for orchestration.
## π Message Flow
### Producer
1. Domain event published via Franz messaging API
2. Mapped using `Franz.Common.Mapping`
3. Serialized using Franz serializer
4. Sent as `ServiceBusMessage`
5. Headers mapped to `ApplicationProperties`
---
### Consumer
1. Azure Service Bus receives message
2. Message mapped back to Franz envelope
3. Metadata validated
4. Dispatched through **Franz.Mediator**
5. Result:
* β
Complete
* β οΈ Retry
* π₯ Dead-letter
---
## π Header Mapping
| Franz Header | Azure Service Bus |
| ------------- | ----------------------------------------------- |
| MessageId | `MessageId` |
| CorrelationId | `CorrelationId` |
| EventType | `ApplicationProperties["franz-event-type"]` |
| TenantId | `ApplicationProperties["franz-tenant-id"]` |
| SchemaVersion | `ApplicationProperties["franz-schema-version"]` |
All headers are defined in **`AzureEventBusHeaders`**.
---
## π Extensibility
This package is designed to evolve without breaking contracts:
* Add sessions support
* Integrate Franz Outbox publishing
* Extend DLQ routing strategies
* Support schema evolution & version fallback
Other Azure transports are implemented separately:
* `Franz.Common.Messaging.AzureEventGrid`
* `Franz.Common.Messaging.AzureEventHubs`
## π§ Roadmap
* Azure Service Bus sessions
* Outbox publisher integration
* Hosting orchestration package
* Azure Event Grid receiver hosting
* Event Hubs streaming adapter (Kafka-style)
* **Current Version:** v2.2.16
* Target Framework: **.NET 10**
* Part of the **Franz Framework**
##Licensing
MIT License β see `LICENSE`.
---
## β
Changelog
### Version 1.7.0
* Added **Azure Service Bus adapter**
* Franz-native mapping via `Franz.Common.Mapping`
* Mediator-driven consumption pipeline
* Deterministic header & metadata propagation
* Kafka / Rabbit parity for Azure environments
---
### v2.0.1 β Internal Modernization
- Messaging and infrastructure refactored for async, thread-safety, and modern .NET 10 patterns.
- All APIs remain fully backward compatible.
- Tests, listeners, and pipeline components modernized.
| 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.ServiceBus (>= 7.20.1)
- Franz.Common.Errors (>= 2.2.16)
- Franz.Common.Headers (>= 2.2.16)
- Franz.Common.Logging (>= 2.2.16)
- Franz.Common.Mapping (>= 2.2.16)
- Franz.Common.Mediator (>= 2.2.16)
- Franz.Common.Mediator.Polly (>= 2.2.16)
- Franz.Common.Messaging (>= 2.2.16)
- SharpCompress (>= 1.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Franz.Common.Messaging.AzureEventBus:
| 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.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.2.16 | 38 | 7/2/2026 |
| 2.2.15 | 101 | 6/29/2026 |
| 2.2.14 | 100 | 6/29/2026 |
| 2.2.13 | 98 | 6/29/2026 |
| 2.2.12 | 100 | 6/28/2026 |
| 2.2.11 | 108 | 6/28/2026 |
| 2.2.10 | 100 | 6/28/2026 |
| 2.2.9 | 106 | 6/28/2026 |
| 2.2.8 | 102 | 6/28/2026 |
| 2.2.7 | 115 | 6/7/2026 |
| 2.2.6 | 107 | 6/6/2026 |
| 2.2.5 | 114 | 6/4/2026 |
| 2.2.4 | 107 | 6/3/2026 |
| 2.2.3 | 107 | 6/2/2026 |
| 2.2.2 | 117 | 6/2/2026 |
| 2.2.1 | 107 | 5/24/2026 |
| 2.1.4 | 121 | 4/27/2026 |
| 2.1.3 | 106 | 4/26/2026 |
| 2.1.2 | 109 | 4/26/2026 |
| 2.1.1 | 114 | 4/22/2026 |