news 2026/8/19 15:12:26

Hangfire.HttpJob 日志与进度条可视化实战:任务执行过程在Dashboard上一览无余

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hangfire.HttpJob 日志与进度条可视化实战:任务执行过程在Dashboard上一览无余

Hangfire.HttpJob 日志与进度条可视化实战:任务执行过程在Dashboard上一览无余

【免费下载链接】Hangfire.HttpJobhttpjob for Hangfire,restful api for Hangfire,job调度与业务分离项目地址: https://gitcode.com/gh_mirrors/ha/Hangfire.HttpJob

Hangfire.HttpJob 是一个将"job调度与业务分离"的开源框架,它把 Hangfire 的作业调度能力封装成了 RESTful API,同时提供了一套日志与进度条可视化能力:无论任务运行在哪个 JobAgent 进程里,日志、错误、进度条都会实时回传并在 Dashboard 上一览无余。本文面向新手,带你用最短的时间看懂这套可视化机制,并跑通第一个带日志和进度条的任务。


🧭 为什么需要日志与进度条可视化?

传统分布式任务调度最常见的痛点就是"黑盒":任务失败了不知道卡在哪一步、日志散落在各个服务器、进度只能靠猜。Hangfire.HttpJob 通过Agent 模式解决了这个问题——业务代码写在独立的 Agent 进程里,执行过程中的每一条日志、每一个进度条更新,都会被收集并写入存储,最终呈现在 Hangfire Dashboard 的作业详情页上。

上图就是一个已经执行完成的 HttpJob 详情页:左侧能看到任务的完整执行代码,右侧状态区显示"Succeded"、耗时统计,下方的 Processing 区域则逐条展示 Agent 回传的执行日志(最后一行输出 "success"),整个执行过程完全透明。


📝 一行代码输出彩色日志:从 Agent 到 Dashboard

Hangfire.HttpJob 的日志可视化入口是JobContext.Console。在继承JobAgent的业务类里,通过jobContext.Console就能输出日志,而且支持颜色区分,方便在 Dashboard 上快速定位问题:

  • Console.Info(...):白色普通信息
  • Console.Warning(...):黄色警告
  • Console.Error(...):红色错误

日志的写入实现在 HangfireConsole.cs,每条日志都会被记录时间偏移量(TimeOffset),这样 Dashboard 上能按时间轴精确还原任务的执行节奏。你可以在 TestHangfireAgent 的 TestJob.cs 里看到最典型的三连调用:

jobContext.Console.Info("info消息"); jobContext.Console.Warning("waring消息"); jobContext.Console.Error("error消息");

日志回传与存储的完整链路涉及 ConsoleLine.cs(定义单条日志的结构:时间、内容、颜色、引用标记)和 ConsoleInfo.cs(记录存储用的 HashKey、SetKey 与任务开始时间)。


📊 进度条可视化:让长任务不再"假死"

对于耗时任务,用户最怕的是"不知道进度"。Hangfire.HttpJob 提供了与 Hangfire 官方一致的进度条 API——jobContext.Console.WriteProgressBar(name),返回一个进度条对象,用SetValue(0~100)即可实时更新:

var bar = jobContext.Console.WriteProgressBar("testbar"); for (int i = 0; i < 10; i++) { bar.SetValue(i * 10); // 每步更新10% await Task.Delay(1000); }

进度条的核心实现位于 HangfireProgressBar.cs:值域强制校验在 0~100 之间,只有值真正变化时才写入(避免无意义的存储写入)。配合 JobContext.cs 中提供的GetParameter<T>CancelToken等能力,你可以在长任务里实时汇报"第 N/M 步",也可以在用户手动取消时优雅退出。

通过 Dashboard 的"新增常规作业"弹窗,可以用 JSON 直接配置一个 HttpJob 的 URL、Method、Data、延迟分钟数、超时时间等参数;而 Agent 模式的任务则完全由代码控制日志与进度,两者在 Dashboard 上的呈现是统一的。


🔁 长驻任务日志:While 循环里也能持续回传

有些任务不是"执行一次就结束",而是持续运行的守护型任务(比如消费队列)。Hangfire.HttpJob 用[HangJobUntilStop]特性支持这种场景,参考 TestHangJob.cs:

[HangJobUntilStop(RegisterName = "HangJob测试")] public class TestHangJob : JobAgent { public override async Task OnStart(JobContext jobContext) { while (!jobContext.CancelToken.IsCancellationRequested) { jobContext.Console.Info("dddd"); await Task.Delay(1000 * 10); } jobContext.Console.Warning("game over"); } }

任务每 10 秒输出一条日志,全部实时可见;当用户在 Dashboard 上停止任务时,CancelToken会触发取消,循环退出后输出 "game over"。这就是"任务执行过程在 Dashboard 上一览无余"的典型长驻场景。

对于周期性任务,同样可以在 Dashboard 上配置 Cron 表达式,执行过程中的日志与进度条更新会与普通任务一样呈现在详情页中。


🗄️ 日志存哪里?五种存储后端随你选

日志与进度条数据不是随便丢的,而是写入你指定的存储。Hangfire.HttpJob.Agent 提供了多种现成实现,只需引入对应 NuGet 包并注册即可:

存储类型项目目录说明
MySQLHangfire.HttpJob.Agent.MysqlLogMysqlConsole 实现
MSSQLHangfire.HttpJob.Agent.MssqlConsoleSqlServer 存储
PostgreSQLHangfire.HttpJob.Agent.PostgreSqlConsole对应 PostgreSqlHangfire 测试工程
RedisHangfire.HttpJob.Agent.RedisConsoleRedisConsole 实现

Test 目录下有对应的完整可运行示例(如 TestHangfireAgent),照葫芦画瓢即可快速起一个带日志可视化的 Agent。


🚀 三步跑通你的第一个可视化任务

  1. 准备一个 Agent 项目:参考 TestHangfireAgent/Startup.cs,调用services.AddHangfireJobAgent()注册服务、app.UseHangfireJobAgent()挂载中间件。
  2. 写一个带日志和进度条的 Job:继承JobAgent,在OnStart里用jobContext.Console输出日志、用WriteProgressBar更新进度。
  3. 在 Dashboard 上执行并观察:创建作业(可参考 pic2、pic4 的 JSON 配置),执行完成后打开详情页,就能看到完整的彩色日志、进度条与耗时统计。


💡 小结

Hangfire.HttpJob 把"调度"和"业务"彻底分离:调度交给 Hangfire 服务端,业务跑在独立的 Agent 进程里,而日志与进度条可视化就是连接两端的透明窗口。对普通用户来说,你不需要关心底层存储的 HashKey、SetKey 是怎么组织的——只需要记住jobContext.Console这一个入口,就能让任务的每一步执行都清清楚楚地呈现在 Dashboard 上。

如果你正在为"任务黑盒"发愁,不妨用 Hangfire.HttpJob 的日志与进度条可视化能力,让每一次执行都有迹可循、一目了然。

【免费下载链接】Hangfire.HttpJobhttpjob for Hangfire,restful api for Hangfire,job调度与业务分离项目地址: https://gitcode.com/gh_mirrors/ha/Hangfire.HttpJob

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 15:10:49

Wand高级功能免费解锁,三步快速上手

Wand高级功能免费解锁&#xff0c;三步快速上手 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 打开 Wand&#xff08;原 WeMod&#xff09;想用个…

作者头像 李华
网站建设 2026/8/19 15:10:36

2026廊坊危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

廊坊老旧房屋数量逐年攀升&#xff0c;不少小区楼龄超过三十年&#xff0c;乡镇自建房因建造标准参差、年久失修&#xff0c;安全隐患日益凸显。市面上危房鉴定机构鳞次栉比、鱼龙混杂&#xff0c;部分无资质公司出具的报告无法通过住建审核&#xff0c;让业主白花冤枉钱。小编…

作者头像 李华
网站建设 2026/8/19 15:09:04

budgetzero测试体系解析:Jest单元测试与Cypress E2E实战

budgetzero测试体系解析&#xff1a;Jest单元测试与Cypress E2E实战 【免费下载链接】budgetzero Open-source, self-hosted, zero-based budgeting. 项目地址: https://gitcode.com/gh_mirrors/bu/budgetzero budgetzero 是一款开源的、自托管的零基预算&#xff08;Ze…

作者头像 李华
网站建设 2026/8/19 15:07:07

RISC-V Arduino Uno开发实战:CH32V103R与Embeetle IDE全解析

1. 项目缘起&#xff1a;当RISC-V遇上Arduino Uno的“皮囊” 如果你和我一样&#xff0c;是个喜欢折腾嵌入式开发板的玩家&#xff0c;那么对Arduino Uno那块经典的蓝色板子一定不会陌生。它定义了“创客”时代的一种标准形态——丰富的数字/模拟IO、标准的电源接口、方便插拔的…

作者头像 李华
网站建设 2026/8/19 15:05:25

海事铱星卫星电话天价账单解析:技术原理、计费陷阱与开发避坑指南

最近在技术社区看到不少关于海事铱星卫星电话的讨论&#xff0c;其中“千万不要给海事铱星卫星电话打电话”这个话题引起了我的注意。这背后其实涉及到一个非常典型且容易被开发者、运维人员甚至普通用户忽略的技术与成本陷阱。本文将从技术原理、通信架构、计费机制和真实案例…

作者头像 李华
网站建设 2026/8/19 15:04:09

AE动态图形入门:零插件制作专业MG动画全流程实战

最近在整理AE学习资料时&#xff0c;发现很多初学者对动态图形&#xff08;Motion Graphics&#xff09;既向往又畏惧&#xff0c;觉得需要复杂的插件和脚本才能入门。其实&#xff0c;AE的核心动能图形功能已经非常强大&#xff0c;足以制作出流畅、专业的动画效果。本文将以一…

作者头像 李华