问题描述: 使用Asp.net Core + Hangfire时,可能会遇到连接关闭或被释放的问题。
解决方法:
services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServer(Configuration.GetConnectionString("HangfireConnection"))
.UseMediatR());
services.AddHangfireServer();
其中,HangfireConnection是连接Hangfire的数据库连接字符串,可以根据实际情况进行配置。
using (var connection = JobStorage.Current.GetConnection())
{
// 使用Hangfire连接执行操作
}
var options = new BackgroundJobServerOptions
{
WorkerCount = Environment.ProcessorCount * 5,
ShutdownTimeout = TimeSpan.FromSeconds(30),
Queues = new[] { "default" },
JobExpirationCheckInterval = TimeSpan.FromHours(1),
HeartbeatInterval = TimeSpan.FromSeconds(30),
ServerCheckInterval = TimeSpan.FromSeconds(30),
ServerTimeout = TimeSpan.FromSeconds(30),
SchedulePollingInterval = TimeSpan.FromSeconds(15),
ServerName = Environment.MachineName
};
app.UseHangfireServer(options);
其中,ShutdownTimeout是设置后台任务的关闭超时时间,JobExpirationCheckInterval是设置后台任务的过期检查间隔时间。
"ConnectionStrings": {
"HangfireConnection": "Your Hangfire Connection String"
},
"DbConnectionPool": {
"MaxPoolSize": 100,
"ConnectionTimeout": 30
}
其中,MaxPoolSize是设置数据库连接池的最大连接数,ConnectionTimeout是设置数据库连接的超时时间。
通过以上方法,可以解决Asp.net Core + Hangfire导致连接关闭或被释放的问题。