阻止HangFire在不同的服务器上多次运行作业?

时间:2020-08-05 22:36:08

标签: c# hangfire

我已经建立了一个仅处理一些订单的周期性工作:

                    {
                        RecurringJob.AddOrUpdate(
                            hangFireJob.JobId,
                            () => hangFireJob.Execute(),
                            hangFireJob.Schedule);
                    }

我遇到的问题是,我们有多个“备份”服务器都在运行相同的代码。他们都在伸向同一个HangFire数据库。

我看到同一份作业多次运行,这显然给我们带来了错误,因为订单已经处理完毕。

我希望备份服务器能够识别重复作业已经排队,而不要再次排队。我认为这样做会超出工作名称(上面的第一个参数)。我在这里想念什么?

我在下面包括了hangfire服务器设置:

        private IEnumerable<IDisposable> GetHangfireServers()
        {
            var configSettings = new Settings();
            GlobalConfiguration.Configuration
                               .UseNinjectActivator(_kernel)
                               .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
                               .UseSimpleAssemblyNameTypeSerializer()
                               .UseRecommendedSerializerSettings()
                               .UseSqlServerStorage(configSettings.HangfireConnectionString, new SqlServerStorageOptions
                               {
                                   CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
                                   SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
                                   QueuePollInterval = TimeSpan.Zero,
                                   UseRecommendedIsolationLevel = true,
                                   DisableGlobalLocks = false,
                                   SchemaName = "LuxAdapter",
                                   PrepareSchemaIfNecessary = false
                               });

            yield return new BackgroundJobServer();
        }```

1 个答案:

答案 0 :(得分:1)

不确定是否已经尝试过此操作,但考虑在作业上使用DisableConcurrentExecution属性,这将阻止同一作业的多次执行。