You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hangfire配置多队列不同worker数时仅识别default队列问题

Hangfire多队列配置错误原因及解决方案

核心问题

你在配置AddHangfireServer时的委托写法错误:AddHangfireServer接收的委托是用于直接修改框架传入的BackgroundJobServerOptions实例,你在委托内直接new新的实例返回,该实例不会被框架读取,因此两个Hangfire服务都沿用了默认配置(仅监听default队列、Worker数量为CPU核心数*5),导致serial队列无Worker处理。

修正后的配置代码

services.AddHangfire(x => x.UseSqlServerStorage(Configuration.GetConnectionString("DbConnection")));

// 串行队列服务
services.AddHangfireServer(x => 
{
    x.ServerName = string.Format("{0}:serial", Environment.MachineName);
    x.Queues = new[] { "serial" };
    x.WorkerCount = 1;
});

// 默认队列服务
services.AddHangfireServer(x => 
{
    x.ServerName = string.Format("{0}:default", Environment.MachineName);
    x.Queues = new[] { "default" };
    x.WorkerCount = Environment.ProcessorCount * 5;
});

验证与使用注意事项

  • 启动项目后打开Hangfire仪表盘,进入「服务器」标签页,确认两个服务实例的队列列分别对应serial和default,即为配置生效
  • 任务推入serial队列时需要明确指定队列:
    • 任务方法上加[Queue("serial")]特性
    • 或者入队时显式指定队列:BackgroundJob.Enqueue(() => YourTaskMethod(), "serial");

内容的提问来源于stack exchange,提问作者Hans-Henrik Møller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:27:00