| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using Database.Database;
- using Esim.SendMail.Jobs;
- using Esim.SendMail.Services;
- using Microsoft.EntityFrameworkCore;
- using Quartz;
- namespace Esim.SendMail;
- public class Program
- {
- private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
- public static async Task Main(string[] args)
- {
- // Configure log4net
- var logRepository = log4net.LogManager.GetRepository(System.Reflection.Assembly.GetEntryAssembly());
- log4net.Config.XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
- log.Info("===========================================");
- log.Info("Esim.SendMail Service Starting...");
- log.Info("===========================================");
- var builder = Host.CreateApplicationBuilder(args);
- // Add configuration
- builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
- // Add DbContext
- var connectionString = builder.Configuration["Connection"];
- builder.Services.AddDbContext<ModelContext>(options =>
- options.UseOracle(connectionString));
- // Add Email Service as singleton for connection pooling
- builder.Services.AddSingleton<IEmailService, HighPerformanceEmailService>();
- // Configure Quartz
- var jobIntervalSeconds = int.Parse(builder.Configuration["Job:IntervalSeconds"] ?? "10");
-
- builder.Services.AddQuartz(q =>
- {
- q.UseMicrosoftDependencyInjectionJobFactory();
- var jobKey = new JobKey("MessageQueueJob");
-
- q.AddJob<MessageQueueJob>(opts => opts.WithIdentity(jobKey));
-
- q.AddTrigger(opts => opts
- .ForJob(jobKey)
- .WithIdentity("MessageQueueJob-trigger")
- .StartNow()
- .WithSimpleSchedule(x => x
- .WithIntervalInSeconds(jobIntervalSeconds)
- .RepeatForever()));
- });
- builder.Services.AddQuartzHostedService(q =>
- {
- q.WaitForJobsToComplete = true;
- });
- var host = builder.Build();
- log.Info($"Job interval: {jobIntervalSeconds} seconds");
- log.Info("Service started successfully. Press Ctrl+C to stop.");
- await host.RunAsync();
- }
- }
|