Cirreum.Messaging.Azure
1.0.21
dotnet add package Cirreum.Messaging.Azure --version 1.0.21
NuGet\Install-Package Cirreum.Messaging.Azure -Version 1.0.21
<PackageReference Include="Cirreum.Messaging.Azure" Version="1.0.21" />
<PackageVersion Include="Cirreum.Messaging.Azure" Version="1.0.21" />
<PackageReference Include="Cirreum.Messaging.Azure" />
paket add Cirreum.Messaging.Azure --version 1.0.21
#r "nuget: Cirreum.Messaging.Azure, 1.0.21"
#:package Cirreum.Messaging.Azure@1.0.21
#addin nuget:?package=Cirreum.Messaging.Azure&version=1.0.21
#tool nuget:?package=Cirreum.Messaging.Azure&version=1.0.21
Cirreum.Messaging.Azure
Azure Service Bus provider for the Cirreum Messaging track — implements the IMessagingClient broker abstractions.
Overview
Cirreum.Messaging.Azure provides a high-level abstraction over Azure Service Bus for distributed messaging scenarios. Built on the Cirreum Foundation Framework, it offers automatic service registration, intelligent caching, comprehensive health checks, and a clean API for queues, topics, and subscriptions.
Features
- Auto-Registration: Automatic discovery and registration of messaging clients from configuration
- Smart Caching: Intelligent sender/receiver caching with sliding expiration and automatic cleanup
- Health Monitoring: Comprehensive health checks for queues, topics, and subscriptions with configurable caching
- Clean Abstractions: Unified messaging API that abstracts Azure Service Bus complexity
- Production Ready: Built-in retry policies, connection management, and telemetry integration
Quick Start
Installation
dotnet add package Cirreum.Messaging.Azure
Configuration-Based Registration
Instances are configured under Cirreum:Messaging:Providers:Azure and auto-registered by the Cirreum runtime (builder.AddMessaging() from Cirreum.Runtime.Messaging, or RegisterServiceProvider<AzureServiceBusRegistrar, ...> directly). Each entry under Instances becomes a keyed IMessagingClient registration whose DI key is the instance key:
{
"Cirreum": {
"Messaging": {
"Providers": {
"Azure": {
"Tracing": true,
"Instances": {
"primary": {
"Name": "app-messaging-servicebus",
"HealthChecks": true
}
}
}
}
}
}
}
The connection is resolved from Name via ConnectionStrings (including Key Vault-backed configuration) first, falling back to an inline ConnectionString property on the instance. A fully qualified namespace value (e.g., mybus.servicebus.windows.net) connects with DefaultAzureCredential (managed identity) instead of a shared access key.
Manual Registration
// Explicit connection string
builder.AddAzureMessagingClient("primary", connectionString);
// Or settings callback
builder.AddAzureMessagingClient("primary", settings => {
settings.Name = "app-messaging-servicebus";
settings.HealthChecks = true;
});
Basic Usage
Resolve the client by its instance key and use the queue/topic factories:
public sealed class OrderQueueService(
[FromKeyedServices("primary")] IMessagingClient client) {
public Task SendAsync(Order order, CancellationToken ct) =>
client.UseQueueSender("orders.pending.v1")
.PublishMessageAsync(
OutboundMessage.AsJsonContent(order).WithSubject("orders.created"),
ct);
public async Task ProcessOneAsync(CancellationToken ct) {
var received = await client.UseQueueReceiver("orders.pending.v1")
.ReceiveMessageAsync(cancellationToken: ct);
var order = JsonSerializer.Deserialize<Order>(received.ContentString);
// ... handle ...
await received.CompleteMessageAsync(ct); // or Abandon / Defer / DeadLetter
}
}
UseQueue(name) returns a combined sender/receiver when a service works both sides of one queue; UseClient<ServiceBusClient>(...) escape-hatches to the native SDK for operations outside the abstraction.
Topics and Subscriptions
// Publishing to a topic
await client.UseTopic("app.notifications.v1")
.BroadcastMessageAsync(OutboundMessage.AsJsonContent(notice).WithSubject("notice.raised"));
// Consuming from a subscription
var received = await client.UseSubscription("app.notifications.v1", "api-head")
.ReceiveMessageAsync();
Contribution Guidelines
Be conservative with new abstractions
The API surface must remain stable and meaningful.Limit dependency expansion
Only add foundational, version-stable dependencies.Favor additive, non-breaking changes
Breaking changes ripple through the entire ecosystem.Include thorough unit tests
All primitives and patterns should be independently testable.Document architectural decisions
Context and reasoning should be clear for future maintainers.Follow .NET conventions
Use established patterns from Microsoft.Extensions.* libraries.
Versioning
Cirreum.Messaging.Azure follows Semantic Versioning:
- Major - Breaking API changes
- Minor - New features, backward compatible
- Patch - Bug fixes, backward compatible
License
This project is licensed under the MIT License - see the LICENSE file for details.
Cirreum Foundation Framework
Layered simplicity for modern .NET
| 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.Identity (>= 1.21.0)
- Azure.Messaging.ServiceBus (>= 7.20.1)
- Cirreum.Messaging (>= 1.0.109)
- Cirreum.ServiceProvider (>= 1.0.21)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Cirreum.Messaging.Azure:
| Package | Downloads |
|---|---|
|
Cirreum.Runtime.Messaging
Messaging services composition and the Distributed Messaging delivery engine for Cirreum server hosts: registers configured messaging providers (Azure Service Bus) as keyed IMessagingClient instances, and delivers DistributedMessage traffic with policy-driven batching, an inbound receiver, and OpenTelemetry observability. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.21 | 0 | 7/5/2026 |
| 1.0.20 | 40 | 7/4/2026 |
| 1.0.19 | 42 | 7/4/2026 |
| 1.0.18 | 145 | 5/7/2026 |
| 1.0.17 | 117 | 5/1/2026 |
| 1.0.16 | 118 | 4/28/2026 |
| 1.0.15 | 127 | 4/26/2026 |
| 1.0.14 | 133 | 4/14/2026 |
| 1.0.12 | 132 | 4/13/2026 |
| 1.0.11 | 124 | 4/10/2026 |
| 1.0.10 | 183 | 3/13/2026 |
| 1.0.9 | 111 | 3/12/2026 |
| 1.0.8 | 120 | 3/9/2026 |
| 1.0.7 | 107 | 3/6/2026 |
| 1.0.6 | 148 | 1/22/2026 |
| 1.0.5 | 127 | 1/21/2026 |
| 1.0.4 | 311 | 12/25/2025 |
| 1.0.3 | 154 | 12/20/2025 |
| 1.0.2 | 330 | 12/16/2025 |
| 1.0.1 | 264 | 11/24/2025 |