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 編輯過