This document explains the NServiceBus configuration system in FlexBase applications, using the EBusiness sample as a reference. The bus configuration provides a flexible, environment-aware messaging system that supports multiple transport and persistence options.
Architecture Overview
The NServiceBus configuration in FlexBase follows a strategy pattern where different configurations are selected based on the environment and requirements. This allows for seamless transitions between development, staging, and production environments.
The EBusiness.Nsb project contains all NServiceBus configuration implementations:
EBusiness.Nsb/
├── EBusiness.Nsb.csproj # Project file with NServiceBus packages
├── LearningNsbConfiguration.cs # Development/Testing transport
├── RabbitMqNsbConfiguration.cs # Production RabbitMQ transport
├── SqlNsbConfiguration.cs # SQL Server transport
├── AzureServiceNsbConfiguration.cs # Azure Service Bus transport
├── AzureStorageQueueNsbConfiguration.cs # Azure Storage Queue transport
├── AmazonSQSNsbConfiguration.cs # Amazon SQS transport
└── MyCustomNsbConfiguration.cs # Template for custom configurations
Dependencies
The project references multiple FlexBase NServiceBus packages:
Reliable: Built-in error handling and retry mechanisms
Maintainable: Clear separation of concerns
Testable: Easy to test with different configurations
This NServiceBus configuration system provides a robust, scalable, and maintainable messaging infrastructure that adapts to different environments and requirements! 🚀
Guard.AgainstNullAndEmpty("SqlPersistenceConnectionString for connection string cannot be empty",
configuration.GetSection("FlexBase")["SqlPersistenceConnectionString"]);
var routing = transport.Routing();
foreach (var route in routes)
{
routing.RouteToEndpoint(route.Assembly, route.Destination);
}
public class MyCustomNsbConfiguration : EndpointConfiguration
{
public MyCustomNsbConfiguration(string endpointName, string errorQueueName = "error") : base(endpointName)
{
this.SendFailedMessagesTo(errorQueueName);
// Add all other NSB Configuration here
// - Transport configuration
// - Persistence configuration
// - Routing configuration
// - Serialization settings
// - Error handling
// - Performance tuning
}
}