Hangfire 是一个开源的 .NET 任务调度框架,它允许开发人员轻松地将长时间运行的任务、定时任务和其他后台处理从主线程中分离出来,以提高应用程序的响应速度和性能
1. 安装 Hangfire
首先,需要一个 ASP.NET Core 项目。通过 NuGet 安装 Hangfire:
Install-Package Hangfire
同时,根据需要安装 Hangfire 支持的数据库驱动,例如 SQL Server 或 Redis。
2. 配置 Hangfire
在 Startup.cs
文件中配置 Hangfire:
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(x => x.UseSqlServerStorage("connection_string"));
services.AddHangfireServer();
}
public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs)
{
app.UseHangfireDashboard();
backgroundJobs.Enqueue(() => Console.WriteLine("Hello Hangfire!"));
}
3. Hangfire 的任务类型
- 立即执行的任务(Fire-and-forget):
var backgroundJobs = app.Services.GetService<IBackgroundJobClient>();
backgroundJobs.Enqueue(() =>
Console.WriteLine("Hello Hangfire!,后台任务,即立即执行一次"));
backgroundJobs.Schedule(() =>
Console.WriteLine("延迟任务,1 分钟后执行"),
TimeSpan.FromMinutes(1));
RecurringJob.AddOrUpdate("easyjob", () =>
Console.WriteLine("Easy!:周期性任务,每天执行一次"),
Cron.Daily);
RecurringJob.AddOrUpdate("powerfuljob",
() => Console.WriteLine("Powerful!,周期性任务:每秒执行一次"),
"0/1 * * * * ? ");
4. 访问 Hangfire Dashboard
app.UseHangfireDashboard();
配置完成后,你可以通过访问 http://localhost:5000/hangfire
来查看 Hangfire Dashboard,监控任务的执行情况。
5. 安全性
在生产环境中,你需要为 Hangfire Dashboard 设置权限验证。可以通过实现 IDashboardAuthorizationFilter
接口来自定义授权逻辑。
Install-Package Hangfire.Dashboard.Authorization
public class BasedAuthorizationFilter : IDashboardAuthorizationFilter
{
public bool Authorize([NotNull] Hangfire.Dashboard.DashboardContext context)
{
if (context.GetHttpContext().Request.Host.ToString().StartsWith("localhost"))
{
return true;
}
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
var httpContext = context.GetHttpContext();
var authUser = httpContext?.User;
bool isAuthorized = authUser?.Identity?.IsAuthenticated == true
&& authUser.IsInRole("YourRoleName");
return isAuthorized;
}
}
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new List<IDashboardAuthorizationFilter> { new BasedAuthorizationFilter() }
});
6. Hangfire 扩展:HttpJob
Hangfire.HttpJob 是一个扩展组件,它允许将 Hangfire 的任务调度和业务逻辑分离。这意味着业务逻辑可以作为独立的 Web API 暴露给 Hangfire 进行调度,从而实现解耦。下面是一些关键点:
- 项目地址:Hangfire.HttpJob GitHub。
- 目的:剥离 Job 调度和业务,使得业务开发者可以忽略 Hangfire 的存在,不同业务线可以独立部署 Job 代理,互不影响。
- 技术特性:支持延迟任务、周期性任务、任务管理、Cron 生成器和任务代理扩展。
- 应用场景:适用于定时任务、后台作业、周期性任务和微服务架构中的任务调度。
7. 其他资源
转自https://www.cnblogs.com/netcore5/p/18596996
该文章在 2024/12/11 8:32:22 编辑过