我有处理一些繁重数据的工作,它将运行一个多小时。
问题是,在工作30分钟后,开始了另一名工作人员,但由于与分布式锁相关的异常而未能完成:
System.Net.Sockets.SocketException (104): Connection reset by peer
我正在使用MySql Storage
和来自版本2.2.5的Hangfire.MySql.Core库中的选项:
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开始已过时。
Invisibility Timeout is obsolete
我正在使用Hangfire.Core 1.7.7,并且在运行30分钟后仍然存在此问题。
编辑:
尝试过:
InvisibilityTimeout = TimeSpan.FromHours(3)
并且Job运行了一个小时没有问题。
我不喜欢过时的解决方案,它将在Hangfire 2.0中删除。
他们说:
“ New Hangfire.SqlServer实现使用普通的旧事务来提取后台作业并将其对其他工作人员隐藏。“
-但这是为SQL Server
实现编写的,我正在使用MySql Storage
。
[MySql Storage
有人遇到相同的问题吗?