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

Hangfire Jobs运行旧版本代码,无法解析已删除服务报错如何解决?

Hangfire执行已删除旧代码问题修复方案

根因说明

Hangfire的所有任务元数据(包括要执行的类、方法、参数、重试规则)都会持久化保存在你配置的存储介质(SQL Server/Redis/PostgreSQL等)中,仅删除业务代码、移除Startup中的服务注册,不会自动清除已经存在于存储中的待执行旧任务、重试队列中的遗留任务,因此会持续触发依赖注入失败的报错。

修复步骤

  • 第一步:清理存储中已存在的旧任务
    优先通过Hangfire内置的Dashboard面板操作:进入「待处理」「重试中」「已计划」三个队列,筛选出所有PQATExportHandler、HwsPQATExportHandler相关的任务,手动批量删除。
    如果任务量过大,可直接操作底层存储批量清理:
    • SQL Server存储:找到Hangfire对应的Job、Set、Queue表,删除字段中包含PQATExport、HwsPQATExport关键字的记录
    • Redis存储:删除所有key前缀包含PQATExport、HwsPQATExport的条目
  • 第二步:排查移除残留的任务提交代码
    全局搜索项目中所有RecurringJob.AddOrUpdate、BackgroundJob.Enqueue、BackgroundJob.Schedule等Hangfire任务提交方法,确认没有残留的PQAT相关任务提交逻辑,避免新的旧任务再次进入队列。
  • 第三步:(可选)添加全局过滤器兜底
    如果担心有遗漏的旧任务,可以添加Hangfire全局执行过滤器,匹配到旧任务时直接取消执行并删除任务,避免无效重试占用资源:
    using Hangfire.Server;
    using Hangfire.Common;
    
    public class ObsoleteJobFilter : IServerFilter
    {
        public void OnPerforming(PerformingContext context)
        {
            var jobTypeFullName = context.Job.Type.FullName;
            // 匹配所有需要废弃的旧任务类
            if (jobTypeFullName.Contains("PQATExportHandler") || jobTypeFullName.Contains("HwsPQATExportHandler"))
            {
                context.Canceled = true;
                // 永久删除该任务,不再进入重试队列
                BackgroundJob.Delete(context.JobId);
            }
        }
    
        public void OnPerformed(PerformedContext context)
        {
            // 无需实现
        }
    }
    
    在Hangfire配置处注册过滤器:
    // .NET 6+ Program.cs 写法
    builder.Services.AddHangfire(config =>
    {
        // 原有Hangfire配置,比如UseSqlServerStorage/UseRedisStorage等
        config.UseFilter(new ObsoleteJobFilter());
    });
    
    // .NET 5及以下 Startup.cs 写法
    services.AddHangfire(config =>
    {
        // 原有Hangfire配置
        config.UseFilter(new ObsoleteJobFilter());
    });
    
  • 第四步:重启应用实例
    完成上述操作后,重启所有运行Hangfire服务的应用实例,清空内存中缓存的任务数据即可。

内容的提问来源于stack exchange,提问作者Mr.Gomer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:06:01