尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

Hangfire.HttpJob 日志与进度条可视化实战:任务执行过程在Dashboard上一览无余 Hangfire.HttpJob 日志与进度条可视化实战任务执行过程在Dashboard上一览无余【免费下载链接】Hangfire.HttpJobhttpjob for Hangfire,restful api for Hangfire,job调度与业务分离项目地址: https://gitcode.com/gh_mirrors/ha/Hangfire.HttpJobHangfire.HttpJob 是一个将job调度与业务分离的开源框架它把 Hangfire 的作业调度能力封装成了 RESTful API同时提供了一套日志与进度条可视化能力无论任务运行在哪个 JobAgent 进程里日志、错误、进度条都会实时回传并在 Dashboard 上一览无余。本文面向新手带你用最短的时间看懂这套可视化机制并跑通第一个带日志和进度条的任务。 为什么需要日志与进度条可视化传统分布式任务调度最常见的痛点就是黑盒任务失败了不知道卡在哪一步、日志散落在各个服务器、进度只能靠猜。Hangfire.HttpJob 通过Agent 模式解决了这个问题——业务代码写在独立的 Agent 进程里执行过程中的每一条日志、每一个进度条更新都会被收集并写入存储最终呈现在 Hangfire Dashboard 的作业详情页上。上图就是一个已经执行完成的 HttpJob 详情页左侧能看到任务的完整执行代码右侧状态区显示Succeded、耗时统计下方的 Processing 区域则逐条展示 Agent 回传的执行日志最后一行输出 success整个执行过程完全透明。 一行代码输出彩色日志从 Agent 到 DashboardHangfire.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 中提供的GetParameterT、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。 三步跑通你的第一个可视化任务准备一个 Agent 项目参考 TestHangfireAgent/Startup.cs调用services.AddHangfireJobAgent()注册服务、app.UseHangfireJobAgent()挂载中间件。写一个带日志和进度条的 Job继承JobAgent在OnStart里用jobContext.Console输出日志、用WriteProgressBar更新进度。在 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),仅供参考
返回列表