.NET Core控制台应用中如何配置Hangfire.Net?
在.NET Core控制台应用中配置Hangfire.Net
很高兴能帮你搞定Hangfire在控制台应用里的配置——这其实比Web应用要简单些,不用折腾HTTP请求管道那一套。下面是一步步的实操指南:
1. 安装必要的NuGet包
打开.NET CLI或者NuGet包管理器,先装上核心包和存储提供者(这里以常用的SQL Server为例,你也可以换成Redis、MongoDB等其他存储):
dotnet add package Hangfire.Core dotnet add package Hangfire.SqlServer dotnet add package Microsoft.Extensions.DependencyInjection
2. 配置Hangfire服务与存储
在控制台应用的Program.cs里,我们需要先构建服务容器,把Hangfire的存储和核心服务配置好。示例代码如下:
using Hangfire; using Hangfire.SqlServer; using Microsoft.Extensions.DependencyInjection; // 构建服务容器 var services = new ServiceCollection(); // 配置Hangfire使用SQL Server存储 services.AddHangfire(config => config .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseSqlServerStorage("YourConnectionString", new SqlServerStorageOptions { CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, UseRecommendedIsolationLevel = true, DisableGlobalLocks = true })); // 添加Hangfire服务器(负责实际执行后台任务) services.AddHangfireServer(); // 生成服务提供者 var serviceProvider = services.BuildServiceProvider();
记得把YourConnectionString替换成你自己的数据库连接字符串,首次运行时Hangfire会自动创建所需的数据库表。
3. 启动Hangfire服务器并调度并行任务
配置完成后,就可以启动服务器并调度你的并行任务了:
// 获取Hangfire的后台作业客户端 var jobClient = serviceProvider.GetRequiredService<IBackgroundJobClient>(); // 批量调度并行任务示例 for (int i = 0; i < 5; i++) { int taskId = i; jobClient.Enqueue(() => RunParallelTask(taskId)); } // 启动Hangfire服务器(会阻塞主线程,保持应用运行) using (var server = new BackgroundJobServer()) { Console.WriteLine("Hangfire服务器已启动,按任意键退出..."); Console.ReadKey(); } // 你的并行任务逻辑 static void RunParallelTask(int taskId) { Console.WriteLine($"任务 {taskId} 开始执行 - {DateTime.Now:HH:mm:ss}"); // 模拟任务耗时操作 Thread.Sleep(TimeSpan.FromSeconds(3)); Console.WriteLine($"任务 {taskId} 执行完成 - {DateTime.Now:HH:mm:ss}"); }
4. 关键注意事项
- 存储替换:如果不想用SQL Server,换成Redis的话只需要安装
Hangfire.Redis.StackExchange包,然后把UseSqlServerStorage换成UseRedisStorage即可。 - 应用生命周期:控制台应用默认执行完就退出,所以用
Console.ReadKey()阻塞主线程来维持Hangfire服务器运行;如果是做Windows服务或Linux守护进程,要改用对应的生命周期管理方式。 - 并行度调整:Hangfire默认根据CPU核心数设置工作线程数,你可以自定义调整:
services.AddHangfireServer(options => { options.WorkerCount = Environment.ProcessorCount * 2; // 自定义工作线程数量 });
- 任务监控:如果需要监控任务状态,可以集成ASP.NET Core最小API来启动Hangfire Dashboard,或者单独部署一个Web应用连接同一个存储查看监控数据。
这样配置后,你的控制台应用就能借助Hangfire轻松实现任务并行执行啦!
内容的提问来源于stack exchange,提问作者Jatinder Singh




