【发布时间】:2016-10-06 13:18:29
【问题描述】:
我正在使用由 SQL Server 支持的 Hangfire 和 Azure 服务总线
我的 Hangfire 服务器配置如下:
var hangfireServiceBusQueuePrefix = ConfigurationManager.AppSettings["HangfireServiceBusQueuePrefix"];
var azureServiceBusConnectionString = ConfigurationManager.ConnectionStrings["AzureServiceBus"].ConnectionString;
var serviceBusQueueOptions = new ServiceBusQueueOptions
{
ConnectionString = azureServiceBusConnectionString,
Queues = new[] { EnqueuedState.DefaultQueue },
QueuePrefix = (hangfireServiceBusQueuePrefix.Equals("MachineName")
? Environment.MachineName
: hangfireServiceBusQueuePrefix)
+ "-hangfire-"
};
var storage = new SqlServerStorage("Hangfire")
.UseServiceBusQueues(serviceBusQueueOptions);
_hangfireConfiguration = GlobalConfiguration.Configuration
.UseStorage(storage);
我注意到,如果我的作业在 1 分钟多后还没有完成,它就会被重播 - 即使原来的作业仍在运行...
例如,当我这样排队时:
BackgroundJob.Enqueue(MyMethod);
如果我们想象MyMethod 看起来像这样
public void MyMethod()
{
Console.WriteLine("MyMethod Started");
Thread.Sleep(TimeSpan.FromSeconds(90));
Console.WriteLine("MyMethod Finished");
}
...发生的情况是,1 分钟后,该方法将“重新启动” 30 秒后,第一个实例将完成,然后第二个实例将在 60 秒后完成。
我需要完成这项工作,一分钟后不重试
【问题讨论】:
标签: azure azureservicebus hangfire