Service Bus Provider

January 23, 2026 · View on GitHub

The Service Bus provider uses Azure Service Bus for orchestration messaging. It's suitable for scenarios requiring Service Bus integration or existing Service Bus infrastructure.

Warning

The Service Bus provider is in maintenance mode and is not recommended for new projects. Consider using Durable Task Scheduler for a managed alternative or the Azure Storage Provider for self-managed deployments.

Installation

dotnet add package Microsoft.Azure.DurableTask.ServiceBus

Configuration

Basic Setup

The Service Bus provider requires separate stores for messaging (Service Bus) and history/state (Azure Storage):

using DurableTask.ServiceBus;
using DurableTask.ServiceBus.Settings;
using DurableTask.ServiceBus.Tracking;
using DurableTask.Core;
using Microsoft.Extensions.Logging;

string serviceBusConnectionString = "Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=...;SharedAccessKey=...";
string storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...";
string taskHubName = "MyTaskHub";

using ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddConsole();
    builder.SetMinimumLevel(LogLevel.Information);
});

// Create the instance store (Azure Table Storage for history)
var instanceStore = new AzureTableInstanceStore(taskHubName, storageConnectionString);

// Create the blob store (Azure Blob Storage for large messages/sessions)
var blobStore = new AzureStorageBlobStore(taskHubName, storageConnectionString);

// Configure settings
var settings = new ServiceBusOrchestrationServiceSettings();

// Create the orchestration service
var service = new ServiceBusOrchestrationService(
    serviceBusConnectionString,
    taskHubName,
    instanceStore,
    blobStore,
    settings);

await service.CreateIfNotExistsAsync();

var worker = new TaskHubWorker(service, loggerFactory);
var client = new TaskHubClient(service, loggerFactory: loggerFactory);

Using Managed Identity

The Service Bus provider supports managed identity authentication (.NET Standard 2.0+):

using Azure.Identity;
using DurableTask.ServiceBus;
using DurableTask.ServiceBus.Settings;
using DurableTask.ServiceBus.Tracking;

string serviceBusNamespace = "mynamespace.servicebus.windows.net";
Uri storageEndpoint = new Uri("https://mystorageaccount.table.core.windows.net");
Uri blobEndpoint = new Uri("https://mystorageaccount.blob.core.windows.net");
string taskHubName = "MyTaskHub";

var credential = new DefaultAzureCredential();

// Create stores with managed identity
var instanceStore = new AzureTableInstanceStore(taskHubName, storageEndpoint, credential);
var blobStore = new AzureStorageBlobStore(taskHubName, blobEndpoint, credential);

var settings = new ServiceBusOrchestrationServiceSettings();

// Create Service Bus connection with managed identity
var service = new ServiceBusOrchestrationService(
    serviceBusNamespace,  // Just the hostname, not a connection string
    credential,
    taskHubName,
    instanceStore,
    blobStore,
    settings);

Configuration Options

ServiceBusOrchestrationServiceSettings

SettingDescriptionDefault
MaxTaskOrchestrationDeliveryCountMax delivery attempts for orchestration messages10
MaxTaskActivityDeliveryCountMax delivery attempts for activity messages10
MaxTrackingDeliveryCountMax delivery attempts for tracking messages10
MaxQueueSizeInMegabytesMaximum queue size for Service Bus queues1024
PrefetchCountMessage prefetch count50
TaskOrchestrationDispatcherSettingsOrchestration dispatcher configurationSee below
TaskActivityDispatcherSettingsActivity dispatcher configurationSee below
MessageCompressionSettingsMessage compression configurationDisabled
JumpStartSettingsJump start (stale instance recovery) settingsEnabled

Dispatcher Settings

Dispatcher settings control concurrency:

var settings = new ServiceBusOrchestrationServiceSettings
{
    TaskOrchestrationDispatcherSettings =
    {
        MaxConcurrentOrchestrations = 100,
        CompressOrchestrationState = true
    },
    TaskActivityDispatcherSettings =
    {
        MaxConcurrentActivities = 100
    }
};

Architecture

Service Bus Resources

The provider creates these Service Bus entities:

Entity TypeName PatternPurpose
Orchestrator Queue{taskhub}/orchestratorOrchestration messages
Worker Queue{taskhub}/workerActivity messages
Tracking Queue{taskhub}/trackingTracking events

Storage Resources

In addition to Service Bus, the provider uses Azure Storage:

ResourceName PatternPurpose
Instance History TableInstanceHistory00{taskhub}Orchestration state and execution history
Jump Start TableJumpStart00{taskhub}Pending orchestrations for stale instance recovery
Blob Container{taskhub}-dtfxLarge messages and session state

Note

Unlike the Azure Storage provider (which has separate History and Instances tables), the Service Bus provider stores both instance metadata and history events in a single InstanceHistory table.

Limitations

  • Requires both Service Bus and Azure Storage
  • Limited query capabilities compared to Azure Storage provider
  • Less commonly used — smaller community and fewer examples
  • No built-in monitoring dashboard

Next Steps