refactor(rabbitmq)!: rename RabbitMqConfiguration to RabbitMqConnectionConfiguration

Rename the RabbitMQ options type to make its purpose explicit and update all consumers in the RabbitMQ, Infrastructure, Publisher, Client and test projects. Inline the connection factory registration in the DI extensions instead of the private AddDefaultServices helper.

BREAKING CHANGE: RabbitMqConfiguration is now RabbitMqConnectionConfiguration.
This commit is contained in:
2026-11-04 14:52:52 +01:00
parent 35094529bb
commit 51d8931dbe
10 changed files with 21 additions and 32 deletions

View File

@@ -28,14 +28,14 @@ public class MessagingServiceInfrastructureConfiguration
}
}
public MessagingServiceInfrastructureConfiguration AddRabbitMqConnectionFactory(Action<RabbitMqConfiguration> configure)
public MessagingServiceInfrastructureConfiguration AddRabbitMqConnectionFactory(Action<RabbitMqConnectionConfiguration> configure)
{
Services.AddRabbitMqConnectionFactory(configure);
_configured.RabbitMqConnectionFactory = true;
return this;
}
public MessagingServiceInfrastructureConfiguration AddRabbitMqConnectionFactory(IConfiguration configuration, string sectionName = RabbitMqConfiguration.SectionName)
public MessagingServiceInfrastructureConfiguration AddRabbitMqConnectionFactory(IConfiguration configuration, string sectionName = RabbitMqConnectionConfiguration.SectionName)
{
Services.AddRabbitMqConnectionFactory(configuration, sectionName);
_configured.RabbitMqConnectionFactory = true;
@@ -57,5 +57,4 @@ public class MessagingServiceInfrastructureConfiguration
return this;
}
#endregion EmailAccountsOptions
}

View File

@@ -17,7 +17,7 @@ public sealed class SendingEmailConsumerPool : IAsyncDisposable
private readonly int _concurrency;
public SendingEmailConsumerPool(
IOptions<RabbitMqConfiguration> config,
IOptions<RabbitMqConnectionConfiguration> config,
IEmailService emailService,
IServiceScopeFactory scopeFactory,
RabbitMqConnectionFactory cnnFactory,

View File

@@ -14,7 +14,7 @@ namespace DigitalData.MessagingService.Infrastructure.Services.Background;
public class ConsumerInitWorker(
SendingEmailConsumerPool ConsumerPool,
ILogger<ConsumerInitWorker> Logger,
IOptions<RabbitMqConfiguration> RabbitMqOptions,
IOptions<RabbitMqConnectionConfiguration> RabbitMqOptions,
ConsumerInitHealthCheck HealthCheck) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)

View File

@@ -16,12 +16,12 @@ namespace DigitalData.MessagingService.Publisher;
/// </summary>
public sealed class SendingEmailPublisher : ISendingEmailPublisher, IAsyncDisposable
{
private readonly RabbitMqConfiguration _config;
private readonly RabbitMqConnectionConfiguration _config;
private readonly ILogger<SendingEmailPublisher> _logger;
private readonly RabbitMqConnectionFactory _cnnFactory;
private readonly Lazy<Task<IChannel>> _lazyChannel;
public SendingEmailPublisher(IOptions<RabbitMqConfiguration> config, ILogger<SendingEmailPublisher> logger, RabbitMqConnectionFactory cnnFactory)
public SendingEmailPublisher(IOptions<RabbitMqConnectionConfiguration> config, ILogger<SendingEmailPublisher> logger, RabbitMqConnectionFactory cnnFactory)
{
_config = config.Value;
_logger = logger;

View File

@@ -9,36 +9,26 @@ namespace DigitalData.MessagingService.RabbitMQ
/// </summary>
public static class DependencyInjection
{
private static IServiceCollection AddDefaultServices(this IServiceCollection services)
{
services.AddSingleton<RabbitMqConnectionFactory>();
return services;
}
/// <summary>
/// Adds Infrastructure layer services to the DI container
/// </summary>
public static IServiceCollection AddRabbitMqConnectionFactory(this IServiceCollection services, Action<RabbitMqConfiguration> configure)
public static IServiceCollection AddRabbitMqConnectionFactory(this IServiceCollection services, Action<RabbitMqConnectionConfiguration> configure)
{
services.AddDefaultServices();
// --- RabbitMQ Configuration ---
services.Configure(configure);
return services;
return services.AddSingleton<RabbitMqConnectionFactory>();
}
/// <summary>
/// Adds Infrastructure layer services to the DI container
/// </summary>
public static IServiceCollection AddRabbitMqConnectionFactory(this IServiceCollection services, IConfiguration configuration, string sectionName = RabbitMqConfiguration.SectionName)
public static IServiceCollection AddRabbitMqConnectionFactory(this IServiceCollection services, IConfiguration configuration, string sectionName = RabbitMqConnectionConfiguration.SectionName)
{
services.AddDefaultServices();
// --- RabbitMQ Configuration ---
services.Configure<RabbitMqConfiguration>(configuration.GetSection(sectionName));
services.Configure<RabbitMqConnectionConfiguration>(configuration.GetSection(sectionName));
return services;
return services.AddSingleton<RabbitMqConnectionFactory>();
}
}
}

View File

@@ -3,7 +3,7 @@ namespace DigitalData.MessagingService.RabbitMQ
/// <summary>
/// Configuration for RabbitMQ connection
/// </summary>
public class RabbitMqConfiguration
public class RabbitMqConnectionConfiguration
{
/// <summary>
/// Configuration section name in appsettings.json

View File

@@ -12,7 +12,7 @@ namespace DigitalData.MessagingService.RabbitMQ
{
private readonly CancellationTokenSource _consumerCts = new CancellationTokenSource();
private readonly RabbitMqConfiguration _config;
private readonly RabbitMqConnectionConfiguration _config;
private readonly ILogger<RabbitMqConnectionFactory>
#if nullable
@@ -41,7 +41,7 @@ namespace DigitalData.MessagingService.RabbitMQ
return new AsyncEventingBasicConsumer(channel);
}
public RabbitMqConnectionFactory(IOptions<RabbitMqConfiguration> config)
public RabbitMqConnectionFactory(IOptions<RabbitMqConnectionConfiguration> config)
{
_config = config.Value;
_lazyConnectionProvider = new Lazy<Task<IConnection>>(async () =>

View File

@@ -1,7 +1,7 @@
namespace DigitalData.MessagingService.Client;
/// <summary>
/// Defines the behavior when <see cref="EmailSender.ConnectRabbitMq(Action{RabbitMQ.RabbitMqConfiguration}, OnReconnect)"/> is called
/// Defines the behavior when <see cref="EmailSender.ConnectRabbitMq(Action{RabbitMQ.RabbitMqConnectionConfiguration}, OnReconnect)"/> is called
/// while a connection has already been established.
/// </summary>
public enum OnReconnect

View File

@@ -21,7 +21,7 @@ internal static class RabbitMqTestConfig
public const string DlqExchangeName = "emailprofiler.emails.dlq";
public const string DlqRoutingKey = "email.outbox.dlq";
public static void Apply(RabbitMqConfiguration cfg)
public static void Apply(RabbitMqConnectionConfiguration cfg)
{
cfg.HostName = HostName;
cfg.Port = Port;

View File

@@ -11,12 +11,12 @@ public sealed class EmailSenderUrlParsingTests
{
/// <summary>
/// Applies the same URL-parsing logic used by the URL overload to a fresh
/// <see cref="RabbitMqConfiguration"/> and returns it for assertion.
/// <see cref="RabbitMqConnectionConfiguration"/> and returns it for assertion.
/// </summary>
private static RabbitMqConfiguration ParseUrl(string url, string username, string password)
private static RabbitMqConnectionConfiguration ParseUrl(string url, string username, string password)
{
var uri = new Uri(url);
var cfg = new RabbitMqConfiguration();
var cfg = new RabbitMqConnectionConfiguration();
cfg.HostName = uri.Host;
cfg.Port = uri.IsDefaultPort ? 5672 : uri.Port;
@@ -95,7 +95,7 @@ public sealed class EmailSenderUrlParsingTests
[Fact]
public void ParseUrl_WithRootPath_DoesNotOverrideVirtualHost()
{
var defaultVHost = new RabbitMqConfiguration().VirtualHost;
var defaultVHost = new RabbitMqConnectionConfiguration().VirtualHost;
var cfg = ParseUrl("amqp://broker:5672/", "user", "pass");
Assert.Equal(defaultVHost, cfg.VirtualHost);
@@ -104,7 +104,7 @@ public sealed class EmailSenderUrlParsingTests
[Fact]
public void ParseUrl_WithoutPath_DoesNotOverrideVirtualHost()
{
var defaultVHost = new RabbitMqConfiguration().VirtualHost;
var defaultVHost = new RabbitMqConnectionConfiguration().VirtualHost;
var cfg = ParseUrl("amqp://broker:5672", "user", "pass");
Assert.Equal(defaultVHost, cfg.VirtualHost);