网站首页 网站源码
using System.Globalization;
using Dpz.Core.Hangfire;
using Hangfire;
using Hangfire.Dashboard;
using Microsoft.AspNetCore.Localization;
namespace Dpz.Core.Web.Jobs.Hangfire;
public static class HangfireConfiguration
{
public static void AddAppHangfireService(this IServiceCollection services,
IConfiguration configuration)
{
services.AddHangfireService(configuration, "hangfire");
services.AddSingleton<IDashboardAuthorizationFilter, HangfireFilter>();
}
/// <summary>
/// hangfire UI设置及周期性任务调度
/// </summary>
/// <param name="app"></param>
/// <returns></returns>
public static void HangfireSetting(this IApplicationBuilder app)
{
var supportedCultures = new[]
{
new CultureInfo("zh-CN"),
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("zh-CN"),
// Formatting numbers, dates, etc.
SupportedCultures = supportedCultures,
// UI strings that we have localized.
SupportedUICultures = supportedCultures
});
//Note 系统初始化后再调用计划任务
var authorizationFilter = app.ApplicationServices.GetService<IDashboardAuthorizationFilter>();
app.UseHangfireDashboard("/jobs", new DashboardOptions
{
Authorization = new[] { authorizationFilter },
AppPath = "/",
StatsPollingInterval = 5000,
//可编辑任务
IsReadOnlyFunc = _ => false,
DarkModeEnabled = true,
DashboardTitle = "任务管理",
FaviconPath = "/favicon.ico"
});
// #if DEBUG
// RecurringJob.AddOrUpdate("测试", () => Console.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss}"), Cron.Minutely);
// return;
// #endif
//每天 UTC时间17点 北京时间1点 删除旧日志
//RecurringJob.AddOrUpdate<LogTaskActivator>(x => x.ClearStart(), "0 0 17 * * ?");
//每隔 5小时删除旧数据
//RecurringJob.AddOrUpdate<ItHomeActivator>("删除旧数据", x => x.DeleteAsync(), "1 */5 * * *");
// //每隔 3小时获取最新CnBeta数据
// RecurringJob.AddOrUpdate<CnBetaTaskActivator>(x => x.Start(), "1 */3 * * *");
// 每隔 3小时获取最新IT之家数据
//RecurringJob.AddOrUpdate<ItHomeActivator>("爬取数据", x => x.StartAsync(), "1 */3 * * *");
//每天 UTC时间20点 北京时间4点 更新Steam
RecurringJob.AddOrUpdate<SteamActivator>("更新Steam", x => x.UpdateLibraryAsync(), "0 0 20 ? * ? ");
//每天 UTC时间19点 北京时间3点 执行任务
//RecurringJob.AddOrUpdate<TaskListHandleActivator>("队列任务", x => x.HandleAsync(), "0 0 19 ? * ? ");
//每天 UTC时间22点 北京时间6点 备份
//RecurringJob.AddOrUpdate<BackupActivator>("备份", x => x.BackupAsync(), "0 0 22 ? * ? ");
}
}
上述代码是一个 ASP.NET Core 应用程序中用于配置 Hangfire 的类,Hangfire 是一个用于在 .NET 应用程序中处理后台任务的库。代码主要分为两个部分:服务注册和 Hangfire 的设置。
AddAppHangfireService
方法)public static void AddAppHangfireService(this IServiceCollection services, IConfiguration configuration)
{
services.AddHangfireService(configuration, "hangfire");
services.AddSingleton<IDashboardAuthorizationFilter, HangfireFilter>();
}
AddHangfireService
: 这个方法用于将 Hangfire 服务添加到依赖注入容器中。它使用传入的 IConfiguration
对象来配置 Hangfire。AddSingleton<IDashboardAuthorizationFilter, HangfireFilter>
: 这行代码将一个自定义的授权过滤器 HangfireFilter
注册为单例服务。这个过滤器用于控制谁可以访问 Hangfire 的仪表板。HangfireSetting
方法)public static void HangfireSetting(this IApplicationBuilder app)
{
var supportedCultures = new[]
{
new CultureInfo("zh-CN"),
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("zh-CN"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
var authorizationFilter = app.ApplicationServices.GetService<IDashboardAuthorizationFilter>();
app.UseHangfireDashboard("/jobs", new DashboardOptions
{
Authorization = new[] { authorizationFilter },
AppPath = "/",
StatsPollingInterval = 5000,
IsReadOnlyFunc = _ => false,
DarkModeEnabled = true,
DashboardTitle = "任务管理",
FaviconPath = "/favicon.ico"
});
RecurringJob.AddOrUpdate<ItHomeActivator>("删除旧数据", x => x.DeleteAsync(), "1 */5 * * *");
RecurringJob.AddOrUpdate<ItHomeActivator>("爬取数据", x => x.StartAsync(), "1 */3 * * *");
RecurringJob.AddOrUpdate<SteamActivator>("更新Steam", x => x.UpdateLibraryAsync(), "0 0 20 ? * ? ");
RecurringJob.AddOrUpdate<TaskListHandleActivator>("队列任务", x => x.HandleAsync(), "0 0 19 ? * ? ");
RecurringJob.AddOrUpdate<BackupActivator>("备份", x => x.BackupAsync(), "0 0 22 ? * ? ");
RecurringJob.AddOrUpdate
方法定义了一系列定时任务。每个任务都有一个唯一的名称和一个执行的时间表(使用 Cron 表达式)。整体来看,这段代码的功能是配置 Hangfire 以便在 ASP.NET Core 应用程序中处理后台任务,包括设置请求的区域文化、配置 Hangfire 仪表板以及定义多个定时任务。这些任务可以用于定期执行数据清理、数据抓取、更新和备份等操作。