我已经建立了一个仅处理一些订单的周期性工作:
{
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();
}```
答案 0 :(得分:1)
不确定是否已经尝试过此操作,但考虑在作业上使用DisableConcurrentExecution
属性,这将阻止同一作业的多次执行。