Skip to main content
The .NET Aspire Azure Service Bus hosting integration provides extension methods for adding Azure Service Bus resources including queues, topics, and subscriptions to your distributed application.

Installation

Install the Azure Service Bus hosting integration package in your AppHost project:
dotnet add package Aspire.Hosting.Azure.ServiceBus

Prerequisites

  • Azure subscription - create one for free
  • Azure CLI installed and authenticated
  • Owner access to the target subscription for role assignments

Configuration

Configure Azure provisioning settings in user secrets:
dotnet user-secrets set "Azure:SubscriptionId" "your-subscription-id"
dotnet user-secrets set "Azure:ResourceGroupPrefix" "myapp"
dotnet user-secrets set "Azure:Location" "eastus"

Usage

Add Service Bus Namespace

In your AppHost project (AppHost.cs):
var builder = DistributedApplication.CreateBuilder(args);

var serviceBus = builder.AddAzureServiceBus("messaging");

var api = builder.AddProject<Projects.Api>("api")
                 .WithReference(serviceBus);

builder.Build().Run();

Consume in Service

In your service project:
dotnet add package Aspire.Azure.Messaging.ServiceBus
Then in Program.cs:
builder.AddAzureServiceBusClient("messaging");

API Reference

AddAzureServiceBus

Adds an Azure Service Bus namespace resource to the application model.
public static IResourceBuilder<AzureServiceBusResource> AddAzureServiceBus(
    this IDistributedApplicationBuilder builder,
    string name)

Parameters

  • name - The name of the resource. This name will be used as the connection string name when referenced in a dependency.

Returns

A reference to the IResourceBuilder<AzureServiceBusResource>.

AddQueue

Adds a queue to the Service Bus namespace.
public static IResourceBuilder<AzureServiceBusQueueResource> AddQueue(
    this IResourceBuilder<AzureServiceBusResource> builder,
    string name,
    string? queueName = null)

AddTopic

Adds a topic to the Service Bus namespace.
public static IResourceBuilder<AzureServiceBusTopicResource> AddTopic(
    this IResourceBuilder<AzureServiceBusResource> builder,
    string name,
    string? topicName = null)

AddSubscription

Adds a subscription to a Service Bus topic.
public static IResourceBuilder<AzureServiceBusSubscriptionResource> AddSubscription(
    this IResourceBuilder<AzureServiceBusTopicResource> builder,
    string name,
    string? subscriptionName = null)

Configuration Examples

Using the Emulator

For local development, use the Azure Service Bus emulator:
var serviceBus = builder.AddAzureServiceBus("messaging")
                        .RunAsEmulator();
The Service Bus emulator requires Docker and provides local queue and topic functionality for development.

Adding Queues

var serviceBus = builder.AddAzureServiceBus("messaging");
var ordersQueue = serviceBus.AddQueue("orders");
var notificationsQueue = serviceBus.AddQueue("notifications");

var orderProcessor = builder.AddProject<Projects.OrderProcessor>("processor")
                            .WithReference(ordersQueue);

var notifier = builder.AddProject<Projects.Notifier>("notifier")
                      .WithReference(notificationsQueue);

Adding Topics and Subscriptions

var serviceBus = builder.AddAzureServiceBus("messaging");
var ordersTopic = serviceBus.AddTopic("orders");
var inventorySub = ordersTopic.AddSubscription("inventory");
var shippingSub = ordersTopic.AddSubscription("shipping");

var inventoryService = builder.AddProject<Projects.Inventory>("inventory")
                              .WithReference(inventorySub);

var shippingService = builder.AddProject<Projects.Shipping>("shipping")
                             .WithReference(shippingSub);

Multiple Queues and Topics

var serviceBus = builder.AddAzureServiceBus("messaging");

// Queues
var commandQueue = serviceBus.AddQueue("commands");
var deadLetterQueue = serviceBus.AddQueue("deadletter");

// Topics
var eventsTopic = serviceBus.AddTopic("events");
var auditSub = eventsTopic.AddSubscription("audit");
var analyticsSub = eventsTopic.AddSubscription("analytics");

var api = builder.AddProject<Projects.Api>("api")
                 .WithReference(commandQueue)
                 .WithReference(eventsTopic);

var auditService = builder.AddProject<Projects.Audit>("audit")
                          .WithReference(auditSub);

Connection Properties

When you reference Azure Service Bus resources using WithReference, the following connection properties are made available to the consuming project.

Service Bus Namespace

Property NameDescription
HostThe hostname of the Service Bus namespace
PortThe port of the Service Bus namespace when the emulator is used
UriThe connection URI, with the format sb://myservicebus.servicebus.windows.net
ConnectionStringEmulator only. Includes SAS key material for the local emulator connection.

Service Bus Queue

The Service Bus queue resource inherits all properties from its parent Service Bus namespace and adds:
Property NameDescription
QueueNameThe name of the queue

Service Bus Topic

The Service Bus topic resource inherits all properties from its parent Service Bus namespace and adds:
Property NameDescription
TopicNameThe name of the topic

Service Bus Subscription

The Service Bus subscription resource inherits all properties from its parent Service Bus topic and adds:
Property NameDescription
SubscriptionNameThe name of the subscription
ConnectionStringThe connection string for the subscription

Environment Variables

Aspire exposes each property as an environment variable named [RESOURCE]_[PROPERTY]. For instance:
  • The Uri property of a resource called messaging becomes MESSAGING_URI
  • The QueueName property becomes MESSAGING_QUEUENAME

Deployment

Local Development with Emulator

var serviceBus = builder.AddAzureServiceBus("messaging")
                        .RunAsEmulator();

var queue = serviceBus.AddQueue("orders");

Development with Azure Resources

var serviceBus = builder.AddAzureServiceBus("messaging");
var queue = serviceBus.AddQueue("orders");
Resources are automatically provisioned when you run the AppHost.

Production Deployment

Use Azure Developer CLI to deploy:
azd up

Common Patterns

Environment-Specific Configuration

var serviceBus = builder.AddAzureServiceBus("messaging");

if (builder.Environment.IsDevelopment())
{
    serviceBus.RunAsEmulator();
}

var queue = serviceBus.AddQueue("orders");

Command Queue Pattern

var serviceBus = builder.AddAzureServiceBus("messaging");
var commandQueue = serviceBus.AddQueue("commands");

var api = builder.AddProject<Projects.Api>("api")
                 .WithReference(commandQueue);

var worker = builder.AddProject<Projects.Worker>("worker")
                    .WithReference(commandQueue);
In the API (sender):
builder.AddAzureServiceBusClient("commands");

public class OrderController(ServiceBusClient client)
{
    public async Task CreateOrder(Order order)
    {
        var sender = client.CreateSender("commands");
        await sender.SendMessageAsync(new ServiceBusMessage(JsonSerializer.Serialize(order)));
    }
}
In the worker (receiver):
builder.AddAzureServiceBusClient("commands");

public class OrderProcessor(ServiceBusClient client)
{
    public async Task ProcessMessages()
    {
        var processor = client.CreateProcessor("commands");
        processor.ProcessMessageAsync += MessageHandler;
        await processor.StartProcessingAsync();
    }
}

Pub/Sub Pattern with Topics

var serviceBus = builder.AddAzureServiceBus("messaging");
var ordersTopic = serviceBus.AddTopic("order-events");
var inventorySub = ordersTopic.AddSubscription("inventory-subscriber");
var shippingSub = ordersTopic.AddSubscription("shipping-subscriber");
var analyticsSub = ordersTopic.AddSubscription("analytics-subscriber");

var orderService = builder.AddProject<Projects.OrderService>("orders")
                          .WithReference(ordersTopic);

var inventoryService = builder.AddProject<Projects.Inventory>("inventory")
                              .WithReference(inventorySub);

var shippingService = builder.AddProject<Projects.Shipping>("shipping")
                             .WithReference(shippingSub);

var analytics = builder.AddProject<Projects.Analytics>("analytics")
                       .WithReference(analyticsSub);

Additional Resources

Build docs developers (and LLMs) love