using DigitalData.MessagingService.Application.Common.Interfaces; using DigitalData.MessagingService.Infrastructure.Queue; using DigitalData.MessagingService.RabbitMQ; 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(OutgoingEmailConsumer EmailConsumer, IOutgoingEmailPublisher EmailPublisher, RabbitMqConnectionFactory CnnFactory) : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { // Initialize the RabbitMQ push-based consumer. This call is non-blocking; // message processing is handled asynchronously via registered event callbacks. await CnnFactory.InitAsync(stoppingToken); await EmailConsumer.InitAsync(); if (EmailPublisher is OutgoingEmailPublisher emailPublisher) await emailPublisher.InitAsync(); } }