Skip to content

Foundatio.AzureStorage / Foundatio.AzureServiceBus ​

Foundatio provides Azure implementations for storage, queuing, and messaging using Azure Blob Storage, Azure Storage Queues, and Azure Service Bus. View source on GitHub → | AzureServiceBus

Overview ​

ImplementationInterfacePackage
AzureFileStorageIFileStorageFoundatio.AzureStorage
AzureStorageQueue<T>IQueue<T>Foundatio.AzureStorage
AzureServiceBusQueue<T>IQueue<T>Foundatio.AzureServiceBus
AzureServiceBusMessageBusIMessageBusFoundatio.AzureServiceBus

Installation ​

bash
# Azure Storage (Blob, Storage Queues)
dotnet add package Foundatio.AzureStorage

# Azure Service Bus (Queues, Messaging)
dotnet add package Foundatio.AzureServiceBus

AzureFileStorage ​

Azure Blob Storage file storage.

csharp
using Foundatio.Storage;

var storage = new AzureFileStorage(o =>
{
    o.ConnectionString = connectionString;
    o.ContainerName = "files";
});

await storage.SaveFileAsync("documents/report.pdf", pdfStream);

Configuration ​

OptionTypeRequiredDefaultDescription
ConnectionStringstring✅Azure Storage connection string
ContainerNamestring"storage"Blob container name

For additional options, see AzureFileStorageOptions source.

AzureStorageQueue ​

Azure Storage Queue implementation.

csharp
using Foundatio.Queues;

var queue = new AzureStorageQueue<WorkItem>(o =>
{
    o.ConnectionString = connectionString;
    o.Name = "work-items";
});

await queue.EnqueueAsync(new WorkItem { Data = "Hello" });

Configuration ​

OptionTypeRequiredDefaultDescription
ConnectionStringstring✅Azure Storage connection string
DequeueIntervalTimeSpan2sPolling interval

For additional options, see AzureStorageQueueOptions source.

AzureServiceBusQueue ​

Azure Service Bus queue with advanced features.

csharp
using Foundatio.Queues;

var queue = new AzureServiceBusQueue<WorkItem>(o =>
{
    o.ConnectionString = connectionString;
    o.Name = "work-items";
});

await queue.EnqueueAsync(new WorkItem { Data = "Hello" });

Configuration ​

OptionTypeRequiredDescription
ConnectionStringstring✅Service Bus connection string
RequiresSessionbool?Create the queue with sessions enabled. Each message then needs a GroupId (sent as SessionId), and messages are processed one at a time, in order, per group. RetryDelay is not applied, so an abandoned message is retried immediately ahead of later messages in its group
RequiresDuplicateDetectionbool?Enable duplicate detection
EnableDeadLetteringOnMessageExpirationbool?DLQ on expiration

For additional options, see AzureServiceBusQueueOptions source.

AzureServiceBusMessageBus ​

Azure Service Bus pub/sub messaging.

csharp
using Foundatio.Messaging;

var messageBus = new AzureServiceBusMessageBus(o =>
{
    o.ConnectionString = connectionString;
    o.Topic = "events";
    o.SubscriptionName = "my-service";
});

await messageBus.SubscribeAsync<OrderCreated>(async order =>
{
    Console.WriteLine($"Order created: {order.OrderId}");
});

await messageBus.PublishAsync(new OrderCreated { OrderId = 123 });

Configuration ​

OptionTypeRequiredDescription
ConnectionStringstring✅Service Bus connection string
SubscriptionNamestringSubscription name (unique per consumer)
PrefetchCountint?Message prefetch count

For additional options, see AzureServiceBusMessageBusOptions source.

Next Steps ​

Released under the Apache 2.0 License.