Refactor RabbitMQ email queue into publisher/consumer
Refactored the RabbitMQ-based email queue system by splitting `OutgoingEmailQueue` into `OutgoingEmailPublisher` and `OutgoingEmailConsumer` to separate publishing and consuming responsibilities. - Introduced `IOutgoingEmailConsumer` and renamed `IOutgoingEmailQueue` to `IOutgoingEmailPublisher` for clarity. - Updated `SendEmailCommandHandler` to use the new publisher abstraction. - Added `RabbitMqConnectionFactory` to centralize RabbitMQ connection management. - Updated dependency injection to register new services. - Simplified RabbitMQ initialization logic by delegating it to `RabbitMqConnectionFactory`. - Enhanced logging for better observability. - Improved modularity and maintainability by separating concerns between message publishing and consuming.
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
namespace DigitalData.MessagingService.Application.Common.Interfaces;
|
||||
|
||||
/// <summary>
|
||||
/// Email queue interface for outgoing emails.
|
||||
/// </summary>
|
||||
public interface IOutgoingEmailConsumer
|
||||
{
|
||||
}
|
||||
@@ -6,7 +6,7 @@ namespace DigitalData.MessagingService.Application.Common.Interfaces;
|
||||
/// <summary>
|
||||
/// Email queue interface for outgoing emails.
|
||||
/// </summary>
|
||||
public interface IOutgoingEmailQueue
|
||||
public interface IOutgoingEmailPublisher
|
||||
{
|
||||
Task EnqueueAsync(OutgoingEmailEvent outgoingEmailEvent, CancellationToken cancellationToken = default);
|
||||
|
||||
@@ -35,14 +35,14 @@ public record SendEmailCommand : IRequest<OutgoingEmailEvent>
|
||||
/// Handler for SendEmailCommand
|
||||
/// Creates EmailOutbox entity via AutoMapper and enqueues to RabbitMQ
|
||||
/// </summary>
|
||||
public class SendEmailCommandHandler(IOutgoingEmailQueue EmailQueue, IMapper Mapper) : IRequestHandler<SendEmailCommand, OutgoingEmailEvent>
|
||||
public class SendEmailCommandHandler(IOutgoingEmailPublisher Publisher, IMapper Mapper) : IRequestHandler<SendEmailCommand, OutgoingEmailEvent>
|
||||
{
|
||||
public async Task<OutgoingEmailEvent> Handle(SendEmailCommand request, CancellationToken cancellationToken)
|
||||
{
|
||||
var outgoingEmailEvent = Mapper.Map<OutgoingEmailEvent>(request);
|
||||
|
||||
// Enqueue to RabbitMQ
|
||||
await EmailQueue.EnqueueAsync(outgoingEmailEvent, cancellationToken);
|
||||
await Publisher.EnqueueAsync(outgoingEmailEvent, cancellationToken);
|
||||
return outgoingEmailEvent;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user