[英]Stop HangFire from running a job multiple times on different servers?
我设置了一个重复性工作,它只处理一些订单:
{
RecurringJob.AddOrUpdate(
hangFireJob.JobId,
() => hangFireJob.Execute(),
hangFireJob.Schedule);
}
我遇到的问题是我们有多个“备份”服务器都运行相同的代码。 他们都在访问同一个 HangFire 数据库。
我看到同一个作业运行了多次,这显然给我们带来了错误,因为订单已经处理完毕。
我希望备份服务器能够识别重复作业已经排队,而不是再次排队。 我认为它会 go 关闭作业名称来执行此操作(上面的第一个参数)。 我在这里想念什么?
我在下面包含了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();
}```
不确定您是否已经尝试过,但考虑在作业上使用DisableConcurrentExecution
属性,以防止多次执行同一作业。
由于默认值仅在进程级别提供唯一性,因此如果您想在同一进程中运行不同的服务器实例,则应手动处理它:
var options = new BackgroundJobServerOptions
{
ServerName = String.Format(
"{0}.{1}",
Environment.MachineName,
Guid.NewGuid().ToString())
};
var server = new BackgroundJobServer(options);
// or
app.UseHangfireServer(options);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.