using DigitalData.MessagingService.Application.Common.Interfaces; using DigitalData.MessagingService.Infrastructure.Queue; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace DigitalData.MessagingService.Infrastructure.Services.Background; /// /// A hosted background service responsible for initializing the outgoing email queue consumer. /// Leverages a push-based, event-driven RabbitMQ consumer to eliminate polling overhead. /// Email account configuration is resolved exclusively from application settings; no database access is performed. /// public class AsyncInitWorker(IOutgoingEmailQueue EmailQueue, ILogger Logger) : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { Logger.LogInformation("Outgoing email queue worker is starting. Initializing event-driven RabbitMQ consumer."); try { // Initialize the RabbitMQ push-based consumer. This call is non-blocking; // message processing is handled asynchronously via registered event callbacks. if (EmailQueue is OutgoingEmailQueue outgoingEmailQueue) await outgoingEmailQueue.InitAsync(stoppingToken); } catch (Exception ex) { Logger.LogError(ex, "A critical error occurred while initializing the outgoing email queue consumer. The worker cannot proceed."); throw; } } }