NET任务调度框架Hangfire使用指南

简介: Hangfire 是一个用于 .NET 应用程序的开源任务调度框架,支持长时间运行任务、定时任务等。通过简单的安装配置,即可将任务从主线程分离,提升应用性能。支持多种数据库,提供丰富的任务类型如立即执行、延迟执行和周期性任务,并有可视化管理界面 Hangfire Dashboard。还支持安全性配置及扩展插件,如 Hangfire.HttpJob,适合各种复杂场景下的任务调度需求。

NET任务调度框架Hangfire使用指南

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. 其他资源

Net使用EasyNetQ简化与RabbitMQ的交互

目录
相关文章
|
21天前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
24 5
|
21天前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
27 4
|
21天前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
24 4
|
25天前
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
|
25天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
45 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
72 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
53 0
|
4月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
4月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
136 0

热门文章

最新文章