【发布时间】:2020-08-05 22:36:08
【问题描述】:
我设置了一个重复性工作,它只处理一些订单:
{
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();
}```
【问题讨论】: