У меня есть задание, которое обрабатывает некоторые тяжелые данные, и оно будет работать более часа.
Проблемы в том, что после 30 минут работы запускается другой работник и не удается завершить с исключениями, связанными с распределенной блокировкой:
System.Net.Sockets.SocketException (104): Connection reset by peer
Обработка изображения заданий
Я использую MySql Storage
с опциями из библиотеки Hangfire.MySql.Core версии 2.2.5:
new MySqlStorageOptions
{
TransactionIsolationLevel = IsolationLevel.ReadCommitted,
QueuePollInterval = TimeSpan.FromSeconds(15),
JobExpirationCheckInterval = TimeSpan.FromHours(1),
CountersAggregateInterval = TimeSpan.FromMinutes(5),
PrepareSchemaIfNecessary = true,
DashboardJobListLimit = 50000,
TransactionTimeout = TimeSpan.FromMinutes(1),
TablesPrefix = ""
})
Я прочитал все, что нашел в Интернете и в документации, и там написано, что нужно его использоватьс:
InvisibilityTimeout = TimeSpan.FromHours(3)
Но этот параметр устарел с версии Hangfire> 1.5.
Тайм-аут невидимости устарел
Я использую Hangfire.Core 1.7.7 и эта проблема сохраняется после 30 минут работы.
РЕДАКТИРОВАТЬ :
Пробовал с:
InvisibilityTimeout = TimeSpan.FromHours(3)
И задание работает в течение часа без проблем.
Мне не нравится устаревшее решение, и оно будет удалено в Hangfire 2.0.
Они говорят:
"Новая реализация Hangfire.SqlServer использует простые старые транзакции для извлечения фоновых заданий и скрытия их от других работников."
-Но это написано для SQL Server
реализации, я использую MySql Storage
.
Кто-нибудь сталкивался с такой же проблемой с MySql Storage
?