狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#.NET任務調度框架Hangfire使用指南

freeflydom
2024年12月11日 8:28 本文熱度 307

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)
{
    // 添加 Hangfire 服務,并配置使用 SQL Server 作為持久化存儲
    services.AddHangfire(x => x.UseSqlServerStorage("connection_string"));
    // 添加 Hangfire 服務器,后臺處理任務的核心服務
    services.AddHangfireServer();
}
public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs)
{
    // 使用 Hangfire Dashboard,允許在瀏覽器中查看任務的執行情況
    app.UseHangfireDashboard();
    // 創建一個 Fire-and-forget 類型的后臺任務,即立即執行一次
    backgroundJobs.Enqueue(() => Console.WriteLine("Hello Hangfire!"));
}

3. Hangfire 的任務類型

  • 立即執行的任務(Fire-and-forget)
  var backgroundJobs = app.Services.GetService<IBackgroundJobClient>();
 // 解析服務并使用 
 // 創建一個 Fire-and-forget 類型的后臺任務,即立即執行一次
 backgroundJobs.Enqueue(() =>
 Console.WriteLine("Hello Hangfire!,后臺任務,即立即執行一次"));
  • 延遲任務(Delayed jobs)
 // 延遲任務,1 分鐘后執行
backgroundJobs.Schedule(() => 
Console.WriteLine("延遲任務,1 分鐘后執行"),
TimeSpan.FromMinutes(1));

  • 周期性任務(Recurring jobs)
//周期性任務,每天執行一次
RecurringJob.AddOrUpdate("easyjob", () =>
Console.WriteLine("Easy!:周期性任務,每天執行一次"), 
Cron.Daily);
//周期性任務 ,corn表達式
RecurringJob.AddOrUpdate("powerfuljob", 
    () => Console.WriteLine("Powerful!,周期性任務:每秒執行一次"),
    "0/1 * * * * ? "); //每秒執行一次【https://cron.ciding.cc】

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;
        }
        // 檢查 context 參數是否為 null
        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"); // 替換 "YourRoleName" 為實際的角色名稱
        return isAuthorized;
    }
 }
  app.UseHangfireDashboard("/hangfire", new DashboardOptions
 {
     Authorization = new List<IDashboardAuthorizationFilter> { new BasedAuthorizationFilter() }
 }); // 設置 Dashboard 的 URL

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 編輯過
    關鍵字查詢
    相關文章
    正在查詢...
    點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
    點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
    點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
    點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
    Copyright 2010-2025 ClickSun All Rights Reserved