32 lines
1.5 KiB
C#
32 lines
1.5 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
public class AsyncInitWorker(IOutgoingEmailQueue EmailQueue, ILogger<AsyncInitWorker> 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;
|
|
}
|
|
}
|
|
} |