使用 Hangfire 和 Azure 服务总线在 1 分钟后重试作业
Job retried after 1 minute using Hangfire with Azure Service Bus
我正在使用 Hangfire,由 SQL 服务器支持,带有 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 分钟后,该方法将 'restart'
30 秒后,第一个实例将完成,然后第二个实例将在另一个 60 秒后完成。
我需要完成此作业,一分钟后无需重试
当您收到消息时,消息会被锁定一段时间。这是为了避免另一个接收者收到相同的消息。
您可以在创建队列时配置LockDuration
。
来自文档:
The maximum value for LockDuration is 5 minutes; the default value is 1 minute.
如果您需要锁定消息超过5分钟,可以使用RenewLock方法手动增加锁定..
我正在使用 Hangfire,由 SQL 服务器支持,带有 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 分钟后,该方法将 'restart' 30 秒后,第一个实例将完成,然后第二个实例将在另一个 60 秒后完成。
我需要完成此作业,一分钟后无需重试
当您收到消息时,消息会被锁定一段时间。这是为了避免另一个接收者收到相同的消息。
您可以在创建队列时配置LockDuration
。
来自文档:
The maximum value for LockDuration is 5 minutes; the default value is 1 minute.
如果您需要锁定消息超过5分钟,可以使用RenewLock方法手动增加锁定..