探索 .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
方法中,我们使用 IBackgroundJobClient
的 Enqueue
方法来触发后台任务,并传递一个参数。
5. 运行应用程序并访问 Hangfire Web 面板
启动 .NET 6 应用程序后,通过浏览器访问 Hangfire 的 Web 面板(通常是 /hangfire
)。在这个面板中,我们可以看到所有已安排的任务、正在执行的任务、失败的任务等信息,并且能够对这些任务进行管理。
总结
Hangfire 为 .NET 开发者提供了一个强大而便捷的任务调度解决方案。它的多种特性和简单易用的 API 使得处理后台任务变得轻松高效。通过上述步骤,我们可以快速在项目中集成 Hangfire,并实现任务的调度和管理。无论是小型项目还是大型分布式系统,Hangfire 都能发挥重要的作用,帮助开发者更好地管理和执行后台任务。 ======================================================================
前些天发现了一个比较好玩的人工智能学习网站,通俗易懂,风趣幽默,可以了解了解AI基础知识,人工智能教程,不是一堆数学公式和算法的那种,用各种举例子来学习,读起来比较轻松,有兴趣可以看一下。
人工智能教程