|
|
|
@ -16,8 +16,11 @@ using CoreCms.Net.Configuration;
|
|
|
|
|
using CoreCms.Net.Utility.Extensions;
|
|
|
|
|
using Hangfire;
|
|
|
|
|
using Hangfire.MySql;
|
|
|
|
|
using Hangfire.Redis;
|
|
|
|
|
using Hangfire.SqlServer;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using SqlSugar;
|
|
|
|
|
using StackExchange.Redis;
|
|
|
|
|
|
|
|
|
|
namespace CoreCms.Net.Core.Config
|
|
|
|
|
{
|
|
|
|
@ -26,6 +29,9 @@ namespace CoreCms.Net.Core.Config
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static class HangFireSetup
|
|
|
|
|
{
|
|
|
|
|
private static ConnectionMultiplexer _redis;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void AddHangFireSetup(this IServiceCollection services)
|
|
|
|
|
{
|
|
|
|
|
if (services == null) throw new ArgumentNullException(nameof(services));
|
|
|
|
@ -34,7 +40,17 @@ namespace CoreCms.Net.Core.Config
|
|
|
|
|
var isEnabledRedis = AppSettingsConstVars.RedisUseTimedTask;
|
|
|
|
|
if (isEnabledRedis)
|
|
|
|
|
{
|
|
|
|
|
services.AddHangfire(x => x.UseRedisStorage(AppSettingsConstVars.RedisConfigConnectionString));
|
|
|
|
|
var configuration = ConfigurationOptions.Parse(AppSettingsConstVars.RedisConfigConnectionString, true);
|
|
|
|
|
_redis = ConnectionMultiplexer.Connect(configuration);
|
|
|
|
|
var db = _redis.GetDatabase();
|
|
|
|
|
|
|
|
|
|
services.AddHangfire(x => x.UseRedisStorage(_redis, new RedisStorageOptions()
|
|
|
|
|
{
|
|
|
|
|
Db = db.Database, //建议根据
|
|
|
|
|
SucceededListSize = 500,//后续列表中的最大可见后台作业,以防止它无限增长。
|
|
|
|
|
DeletedListSize = 500,//删除列表中的最大可见后台作业,以防止其无限增长。
|
|
|
|
|
InvisibilityTimeout = TimeSpan.FromMinutes(30),
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -48,14 +64,22 @@ namespace CoreCms.Net.Core.Config
|
|
|
|
|
JobExpirationCheckInterval = TimeSpan.FromHours(1), //- 作业到期检查间隔(管理过期记录)。默认值为1小时。
|
|
|
|
|
CountersAggregateInterval = TimeSpan.FromMinutes(5), //- 聚合计数器的间隔。默认为5分钟。
|
|
|
|
|
PrepareSchemaIfNecessary = true, //- 如果设置为true,则创建数据库表。默认是true。
|
|
|
|
|
DashboardJobListLimit = 50000, //- 仪表板作业列表限制。默认值为50000。
|
|
|
|
|
DashboardJobListLimit = 500, //- 仪表板作业列表限制。默认值为50000。
|
|
|
|
|
TransactionTimeout = TimeSpan.FromMinutes(1), //- 交易超时。默认为1分钟。
|
|
|
|
|
TablesPrefix = "Hangfire" //- 数据库中表的前缀。默认为none
|
|
|
|
|
})));
|
|
|
|
|
}
|
|
|
|
|
else if (dbTypeString == DbType.SqlServer.ToString())
|
|
|
|
|
{
|
|
|
|
|
services.AddHangfire(x => x.UseSqlServerStorage(AppSettingsConstVars.DbSqlConnection));
|
|
|
|
|
services.AddHangfire(x => x.UseSqlServerStorage(AppSettingsConstVars.DbSqlConnection, new SqlServerStorageOptions()
|
|
|
|
|
{
|
|
|
|
|
QueuePollInterval = TimeSpan.FromSeconds(15), //- 作业队列轮询间隔。默认值为15秒。
|
|
|
|
|
JobExpirationCheckInterval = TimeSpan.FromHours(1), //- 作业到期检查间隔(管理过期记录)。默认值为1小时。
|
|
|
|
|
CountersAggregateInterval = TimeSpan.FromMinutes(5), //- 聚合计数器的间隔。默认为5分钟。
|
|
|
|
|
PrepareSchemaIfNecessary = true, //- 如果设置为true,则创建数据库表。默认是true。
|
|
|
|
|
DashboardJobListLimit = 500, //- 仪表板作业列表限制。默认值为50000。
|
|
|
|
|
TransactionTimeout = TimeSpan.FromMinutes(1), //- 交易超时。默认为1分钟。
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -64,7 +88,7 @@ namespace CoreCms.Net.Core.Config
|
|
|
|
|
options.Queues = new[] { GlobalEnumVars.HangFireQueuesConfig.@default.ToString(), GlobalEnumVars.HangFireQueuesConfig.apis.ToString(), GlobalEnumVars.HangFireQueuesConfig.web.ToString(), GlobalEnumVars.HangFireQueuesConfig.recurring.ToString() };
|
|
|
|
|
options.ServerTimeout = TimeSpan.FromMinutes(4);
|
|
|
|
|
options.SchedulePollingInterval = TimeSpan.FromSeconds(15);//秒级任务需要配置短点,一般任务可以配置默认时间,默认15秒
|
|
|
|
|
options.ShutdownTimeout = TimeSpan.FromMinutes(30); //超时时间
|
|
|
|
|
options.ShutdownTimeout = TimeSpan.FromMinutes(5); //超时时间
|
|
|
|
|
options.WorkerCount = Math.Max(Environment.ProcessorCount, 20); //工作线程数,当前允许的最大线程,默认20
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|