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

如何在无UI的情况下获取并显示Hangfire中所有存储的作业?

无UI环境下获取并显示Hangfire所有存储作业的方法

你的初次尝试方向是对的,但当前代码仅获取了排队中的作业,如果要覆盖所有状态的作业(执行中、已完成、失败、计划中等),需要调用MonitoringApi的多个方法来遍历不同作业池。

完整实现示例

下面是可以获取全量作业的改进版代码:

[HttpGet("jobs")]
[ProducesResponseType(StatusCodes.Status200OK)]
public IActionResult GetAllJobs()
{
    var monitoringApi = JobStorage.Current.GetMonitoringApi();
    var allJobs = new List<object>();

    // 获取排队中的作业
    var enqueuedJobs = monitoringApi.EnqueuedJobs();
    foreach (var job in enqueuedJobs)
    {
        allJobs.Add(new
        {
            JobId = job.Key,
            JobName = job.Value.Job.Type.FullName,
            CreatedAt = job.Value.CreatedAt,
            EnqueuedAt = job.Value.EnqueuedAt,
            State = job.Value.State,
            Queue = job.Value.Queue
        });
    }

    // 获取执行中的作业
    var processingJobs = monitoringApi.ProcessingJobs();
    foreach (var job in processingJobs)
    {
        allJobs.Add(new
        {
            JobId = job.Key,
            JobName = job.Value.Job.Type.FullName,
            CreatedAt = job.Value.CreatedAt,
            StartedAt = job.Value.StartedAt,
            State = job.Value.State,
            ServerId = job.Value.ServerId
        });
    }

    // 获取已完成的作业(示例取全量,可按分页或时间范围调整)
    var completedJobs = monitoringApi.SucceededJobs(0, int.MaxValue);
    foreach (var job in completedJobs)
    {
        allJobs.Add(new
        {
            JobId = job.Key,
            JobName = job.Value.Job.Type.FullName,
            CreatedAt = job.Value.CreatedAt,
            SucceededAt = job.Value.SucceededAt,
            State = "Succeeded",
            Duration = job.Value.Duration
        });
    }

    // 获取失败的作业
    var failedJobs = monitoringApi.FailedJobs(0, int.MaxValue);
    foreach (var job in failedJobs)
    {
        allJobs.Add(new
        {
            JobId = job.Key,
            JobName = job.Value.Job.Type.FullName,
            CreatedAt = job.Value.CreatedAt,
            FailedAt = job.Value.FailedAt,
            State = "Failed",
            ExceptionMessage = job.Value.Exception.Message
        });
    }

    // 获取计划中的作业
    var scheduledJobs = monitoringApi.ScheduledJobs();
    foreach (var job in scheduledJobs)
    {
        allJobs.Add(new
        {
            JobId = job.Key,
            JobName = job.Value.Job.Type.FullName,
            CreatedAt = job.Value.CreatedAt,
            ScheduledAt = job.Value.ScheduledAt,
            State = "Scheduled"
        });
    }

    return Ok(allJobs);
}

关键说明

  • MonitoringApi是Hangfire提供的核心查询接口,不同方法对应不同状态的作业集合
  • 若需要分页,可调整SucceededJobs、FailedJobs等方法的参数(例如monitoringApi.SucceededJobs(pageIndex * pageSize, pageSize))
  • 可根据业务需求裁剪返回字段,仅保留JobId、JobName、State等核心信息即可

内容的提问来源于stack exchange,提问作者MarcGr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:12:16