You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

.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

火山引擎 最新活动