欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#.NET任務(wù)調(diào)度框架Hangfire使用指南

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

Hangfire 是一個(gè)開(kāi)源的 .NET 任務(wù)調(diào)度框架,它允許開(kāi)發(fā)人員輕松地將長(zhǎng)時(shí)間運(yùn)行的任務(wù)、定時(shí)任務(wù)和其他后臺(tái)處理從主線程中分離出來(lái),以提高應(yīng)用程序的響應(yīng)速度和性能

1. 安裝 Hangfire

首先,需要一個(gè) ASP.NET Core 項(xiàng)目。通過(guò) NuGet 安裝 Hangfire:

Install-Package Hangfire

同時(shí),根據(jù)需要安裝 Hangfire 支持的數(shù)據(jù)庫(kù)驅(qū)動(dòng),例如 SQL Server 或 Redis。

2. 配置 Hangfire

在 Startup.cs 文件中配置 Hangfire:

public void ConfigureServices(IServiceCollection services)
{
    // 添加 Hangfire 服務(wù),并配置使用 SQL Server 作為持久化存儲(chǔ)
    services.AddHangfire(x => x.UseSqlServerStorage("connection_string"));
    // 添加 Hangfire 服務(wù)器,后臺(tái)處理任務(wù)的核心服務(wù)
    services.AddHangfireServer();
}
public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs)
{
    // 使用 Hangfire Dashboard,允許在瀏覽器中查看任務(wù)的執(zhí)行情況
    app.UseHangfireDashboard();
    // 創(chuàng)建一個(gè) Fire-and-forget 類(lèi)型的后臺(tái)任務(wù),即立即執(zhí)行一次
    backgroundJobs.Enqueue(() => Console.WriteLine("Hello Hangfire!"));
}

3. Hangfire 的任務(wù)類(lèi)型

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

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

4. 訪問(wèn) Hangfire Dashboard

app.UseHangfireDashboard();
配置完成后,你可以通過(guò)訪問(wèn) http://localhost:5000/hangfire 來(lái)查看 Hangfire Dashboard,監(jiān)控任務(wù)的執(zhí)行情況。

5. 安全性

在生產(chǎn)環(huán)境中,你需要為 Hangfire Dashboard 設(shè)置權(quán)限驗(yàn)證。可以通過(guò)實(shí)現(xiàn) IDashboardAuthorizationFilter 接口來(lái)自定義授權(quán)邏輯。

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 參數(shù)是否為 null
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }
        // 獲取當(dāng)前請(qǐng)求的用戶(hù)標(biāo)識(shí)
        var httpContext = context.GetHttpContext();
        var authUser = httpContext?.User;
        // 這里可以根據(jù)需要實(shí)現(xiàn)具體的授權(quán)邏輯
        // 檢查用戶(hù)是否在某個(gè)角色內(nèi),或者是否有特定的權(quán)限標(biāo)記
        bool isAuthorized = authUser?.Identity?.IsAuthenticated == true
                           && authUser.IsInRole("YourRoleName"); // 替換 "YourRoleName" 為實(shí)際的角色名稱(chēng)
        return isAuthorized;
    }
 }
  app.UseHangfireDashboard("/hangfire", new DashboardOptions
 {
     Authorization = new List<IDashboardAuthorizationFilter> { new BasedAuthorizationFilter() }
 }); // 設(shè)置 Dashboard 的 URL

6. Hangfire 擴(kuò)展:HttpJob

Hangfire.HttpJob 是一個(gè)擴(kuò)展組件,它允許將 Hangfire 的任務(wù)調(diào)度和業(yè)務(wù)邏輯分離。這意味著業(yè)務(wù)邏輯可以作為獨(dú)立的 Web API 暴露給 Hangfire 進(jìn)行調(diào)度,從而實(shí)現(xiàn)解耦。下面是一些關(guān)鍵點(diǎn):

  • 項(xiàng)目地址Hangfire.HttpJob GitHub
  • 目的:剝離 Job 調(diào)度和業(yè)務(wù),使得業(yè)務(wù)開(kāi)發(fā)者可以忽略 Hangfire 的存在,不同業(yè)務(wù)線可以獨(dú)立部署 Job 代理,互不影響。
  • 技術(shù)特性:支持延遲任務(wù)、周期性任務(wù)、任務(wù)管理、Cron 生成器和任務(wù)代理擴(kuò)展。
  • 應(yīng)用場(chǎng)景:適用于定時(shí)任務(wù)、后臺(tái)作業(yè)、周期性任務(wù)和微服務(wù)架構(gòu)中的任務(wù)調(diào)度。

7. 其他資源

    轉(zhuǎn)自https://www.cnblogs.com/netcore5/p/18596996


    該文章在 2024/12/11 8:32:22 編輯過(guò)
    關(guān)鍵字查詢(xún)
    相關(guān)文章
    正在查詢(xún)...
    點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
    點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
    點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
    點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
    Copyright 2010-2025 ClickSun All Rights Reserved