2016-10-06 4 views
2

Я использую замедленное воспламенение, подкрепленную SQL Server, с помощью Azure Service BusРаботы повторена через 1 минуту с помощью замедленного воспламенения с Azure Service Bus

Конфигурации сервера

Моих замедленного воспламенения выглядит следующим образом:

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 секунд.

Мне нужна эта работа, чтобы закончить, не будучи повторно пытался через одну минуту

ответ

1

Когда вы получите сообщение, сообщение заблокировано в течение определенного срока. Это делается для того, чтобы другой получатель не получал одно и то же сообщение.

Вы можете настроить LockDuration при создании очереди. Из документации:

Максимальное значение для LockDuration составляет 5 минут; значение по умолчанию - 1 минута.

Если вам нужно заблокировать сообщение более чем на 5 минут, вы можете увеличить блокировку вручную, используя метод RenewLock ..

+0

Незначительные загвоздка в том, что у меня нет доступа к методу RenewLock с помощью Hangfire Azure Service Автобусная библиотека ... Я не думаю? – Alex

+0

Блок обновления находится на brokeredmessage. У вас есть доступ к брокерскому сообщению? – Thomas

+0

Нет, все это завернуто. Я посмотрю источник для библиотеки и посмотрю, есть ли что-нибудь, что я могу добавить – Alex