diff --git a/src/KArtSell.Host/Program.cs b/src/KArtSell.Host/Program.cs index f15c9f14..18a12d9e 100644 --- a/src/KArtSell.Host/Program.cs +++ b/src/KArtSell.Host/Program.cs @@ -217,32 +217,41 @@ app.Services.RegisterModelOperationsSchedules(modelOperationsDispatcherEnabled, // Register recurring jobs with timeout resilience (Hangfire distributed lock may be stuck) var logger = app.Services.GetRequiredService>(); -try -{ - RecurringJob.AddOrUpdate( - "outbox-poller", - job => job.ExecuteAsync(CancellationToken.None), - "* * * * *", - new RecurringJobOptions { TimeZone = TimeZoneInfo.Utc }); - logger.LogInformation("✅ Recurring job 'outbox-poller' registered"); -} -catch (Exception ex) when (ex.Message.Contains("Timeout")) -{ - logger.LogWarning(ex, "⚠️ Hangfire lock timeout registering outbox-poller; job may be registered by another instance or lock is stuck"); -} +var hangfireRetryEnabled = Environment.GetEnvironmentVariable("HANGFIRE_RETRY_ENABLED") != "false"; -try +if (hangfireRetryEnabled) { - RecurringJob.AddOrUpdate( - "downstream-consumer", - job => job.ExecuteAsync(CancellationToken.None), - "* * * * *", - new RecurringJobOptions { TimeZone = TimeZoneInfo.Utc }); - logger.LogInformation("✅ Recurring job 'downstream-consumer' registered"); + try + { + RecurringJob.AddOrUpdate( + "outbox-poller", + job => job.ExecuteAsync(CancellationToken.None), + "* * * * *", + new RecurringJobOptions { TimeZone = TimeZoneInfo.Utc }); + logger.LogInformation("✅ Recurring job 'outbox-poller' registered"); + } + catch (Exception ex) when (ex.Message.Contains("Timeout")) + { + logger.LogWarning(ex, "⚠️ Hangfire lock timeout registering outbox-poller; job may be registered by another instance or lock is stuck"); + } + + try + { + RecurringJob.AddOrUpdate( + "downstream-consumer", + job => job.ExecuteAsync(CancellationToken.None), + "* * * * *", + new RecurringJobOptions { TimeZone = TimeZoneInfo.Utc }); + logger.LogInformation("✅ Recurring job 'downstream-consumer' registered"); + } + catch (Exception ex) when (ex.Message.Contains("Timeout")) + { + logger.LogWarning(ex, "⚠️ Hangfire lock timeout registering downstream-consumer; job may be registered by another instance or lock is stuck"); + } } -catch (Exception ex) when (ex.Message.Contains("Timeout")) +else { - logger.LogWarning(ex, "⚠️ Hangfire lock timeout registering downstream-consumer; job may be registered by another instance or lock is stuck"); + logger.LogInformation("⏭️ Hangfire recurring jobs skipped (HANGFIRE_RETRY_ENABLED=false)"); } // OpenDart daily batch (KST timezone, market open 09:00)