.net任务调度框架hangfire

发布于:2025-06-22 ⋅ 阅读:(17) ⋅ 点赞:(0)

探索 .NET 任务调度框架 Hangfire

在 .NET 和 .NET Core 应用程序开发中,处理后台任务是一项常见需求,比如发送邮件、处理图片或者执行定时任务等。而 Hangfire 作为一个开源的后台任务处理框架,能让这些任务的执行变得简单又可靠。今天咱们就来深入了解下 Hangfire。

Hangfire 简介

Hangfire 就像是一个得力助手,能帮助开发者轻松管理后台任务。它具有多个实用的特性:

  • 持久化存储:可以将任务信息持久化保存,即便应用程序重启或者出现异常,任务也不会丢失。
  • 延迟执行:允许开发者指定任务在未来某个特定时间执行,满足多样化的业务需求。
  • 循环执行:支持按照一定的时间间隔循环执行任务,比如每天凌晨执行数据备份任务。
  • 分布式处理:能够在多个服务器上并行处理任务,提高系统的处理能力和效率。
  • 集成性和扩展性:可以方便地集成到现有的 .NET 项目中,并且支持扩展,满足不同场景的定制需求。
  • 内置 Web 面板:提供了一个直观的 Web 界面,让开发者可以实时监视和控制任务的执行情况。

Hangfire 基本使用步骤

1. 安装 Hangfire

首先,我们要使用 NuGet 包管理器来安装 Hangfire 及其 SQL Server 存储支持。这里以 SQL Server 为例,在 NuGet 包管理器控制台输入以下命令:

Install-Package Hangfire  
Install-Package Hangfire.SqlServer

这样就完成了 Hangfire 及其相关依赖的安装。

2. 配置 Hangfire

在 ASP.NET Core 应用程序里,我们需要在 Startup.cs 文件中进行 Hangfire 的配置。下面是具体的代码示例:

using Hangfire;
using System.Data.SqlClient;

var builder = WebApplication.CreateBuilder(args);

// 添加服务到容器
builder.Services.AddControllersWithViews();

// 配置数据库连接字符串(假设使用 SQL Server)
var connectionString = builder.Configuration.GetConnectionString("con");

// 配置 Hangfire 使用 SQL Server 存储
builder.Services.AddHangfire(config =>
    config.UseSqlServerStorage(connectionString));

// 添加 Hangfire 服务器来处理后台作业
builder.Services.AddHangfireServer();

var app = builder.Build();

// 配置 HTTP 请求管道
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

// 如果你要使用 Hangfire 的 Web 面板,添加以下中间件
app.UseHangfireDashboard();

app.Run();

在这段代码中,我们首先获取数据库连接字符串,然后配置 Hangfire 使用 SQL Server 存储任务信息。接着添加 Hangfire 服务器来处理后台作业,并在请求管道中添加 Hangfire 的 Web 面板中间件,方便我们后续对任务进行管理。

3. 创建一个后台任务

接下来,我们定义一个简单的任务类和方法。示例代码如下:

public class MyJob
{
    public void DoWork(int someParameter)
    {
        // 任务的逻辑代码
        Console.WriteLine($"Doing work with parameter: {someParameter}");
    }
}

在这个 MyJob 类中,DoWork 方法就是我们要执行的任务逻辑,这里只是简单地输出一条信息。

4. 触发后台任务

在需要的地方,比如控制器中,我们可以触发后台任务。以下是示例代码:

private readonly ILogger<HomeController> _logger;
private readonly IBackgroundJobClient _backgroundJobClient;

public HomeController(ILogger<HomeController> logger, IBackgroundJobClient backgroundJobClient)
{
    _logger = logger;
    _backgroundJobClient = backgroundJobClient;
}

public IActionResult Index()
{
    // 触发后台任务
    var jobId = _backgroundJobClient.Enqueue<MyJob>(j => j.DoWork(123));
    return View();
}

在控制器的 Index 方法中,我们使用 IBackgroundJobClientEnqueue 方法来触发后台任务,并传递一个参数。

5. 运行应用程序并访问 Hangfire Web 面板

启动 .NET 6 应用程序后,通过浏览器访问 Hangfire 的 Web 面板(通常是 /hangfire)。在这个面板中,我们可以看到所有已安排的任务、正在执行的任务、失败的任务等信息,并且能够对这些任务进行管理。

总结

Hangfire 为 .NET 开发者提供了一个强大而便捷的任务调度解决方案。它的多种特性和简单易用的 API 使得处理后台任务变得轻松高效。通过上述步骤,我们可以快速在项目中集成 Hangfire,并实现任务的调度和管理。无论是小型项目还是大型分布式系统,Hangfire 都能发挥重要的作用,帮助开发者更好地管理和执行后台任务。 ======================================================================
前些天发现了一个比较好玩的人工智能学习网站,通俗易懂,风趣幽默,可以了解了解AI基础知识,人工智能教程,不是一堆数学公式和算法的那种,用各种举例子来学习,读起来比较轻松,有兴趣可以看一下。
人工智能教程


网站公告

今日签到

点亮在社区的每一天
去签到