Hangfire.HttpJob.Agent 开发指南让普通Web服务秒变分布式Job执行器【免费下载链接】Hangfire.HttpJobhttpjob for Hangfire,restful api for Hangfire,job调度与业务分离项目地址: https://gitcode.com/gh_mirrors/ha/Hangfire.HttpJob如果你正在用 Hangfire 做任务调度却苦于「调度代码」和「业务代码」耦合在一起、每次加任务都要改服务端那么Hangfire.HttpJob.Agent就是你想要的答案。它是 Hangfire.HttpJob 项目httpjob for Hangfirerestful api for Hangfire的核心扩展包主打Job调度与业务分离Hangfire 只负责调度你的任意一个普通 ASP.NET Core Web 服务只要接入 Agent就能立即升级为分布式Job执行器通过 HTTP 协议被远程驱动执行任务。为什么需要「调度与业务分离」传统 Hangfire 开发中任务类必须放在服务端程序集里调度逻辑和业务逻辑共享一套代码。随着任务增多服务端越来越臃肿上线一个任务就要重新发布整个调度服务风险极高。Hangfire.HttpJob.Agent 彻底改变了这个局面调度端Hangfire Server只负责维护任务元数据、Cron 表达式、触发执行、展示日志与进度执行端Agent Web服务部署在业务侧通过中间件接收调度指令真正执行业务逻辑两端通过 HTTP Header 协议通信天然支持跨机器、跨网络的分布式Job执行器集群。Agent 是如何工作的整个通信链路并不神秘。调度端触发任务时会向 Agent 的中间件 JobAgentMiddleware.cs 发起请求携带任务类名、动作run/stop/detail、参数和存储配置Agent 收到后通过 JobAgent.cs 实例化你的 Job 并执行同时通过心跳机制Heartbeat.cs持续向调度端上报运行状态、CPU 占用等健康信息。调度端能实时看到每个 Agent 是否在线任务执行进度一览无余。三种 Job 生命周期覆盖绝大数场景开发 Job 时你只需要继承JobAgent基类然后用一个特性声明它的生命周期即可。三种类型各自对应不同的业务场景类型特性适用场景单例 Job[SingletonJob]同一时刻只允许一个实例运行如数据同步、报表生成多例 Job[TransientJob]每次调度都新建实例可并发执行如批量消息推送挂起 Job[HangJobUntilStop]启动后一直驻留直到收到停止指令如实时监听、长连接服务这三种特性定义在 Attribute 目录 下即使不打任何标签默认也会按单例 Job 处理。最快配置方法三步上手第一步安装 NuGet 包在业务 Web 服务中安装Hangfire.HttpJob.Agent调度端安装Hangfire.HttpJob。存储可选 Mysql、SqlServer、PostgreSql、Redis 对应的 Console 包。第二步注册 Agent 中间件参考 Startup.cs仅需两行代码services.AddHangfireJobAgent(); // 注册 Agent 服务 app.UseHangfireJobAgent(); // 挂载接收调度的中间件第三步编写一个 Job 类继承JobAgent重写OnStart方法你的普通 Web 服务就具备分布式Job执行器能力了。一个最简单的单例 Job 参考 TestJob.cs[SingletonJob(RegisterName 单例job)] public class TestJob : JobAgent { public override async Task OnStart(JobContext jobContext) { jobContext.Console.Info(任务开始执行); await Task.Delay(1000); jobContext.Console.Info(任务执行完毕); } }是不是很简单业务代码里完全不需要引用 Hangfire调度端也完全不知道你的业务细节这就是调度与业务分离的魅力。在 Dashboard 上可视化你的 Job调度端启用UseHangfireHttpJob()后Hangfire Dashboard 会自动多出「新增常规作业」「新增周期性作业」入口直接粘贴 JSON 即可创建任务Agent 端通过jobContext.Console输出的日志、进度条会实时回传到 Dashboard 详情页你在网页上就能看到任务每一秒的执行轨迹排查问题再也不用翻服务器日志开发进阶用好 JobContext 的几个实用技巧JobContext源码见 JobContext.cs是你在 Job 内获取上下文信息的唯一入口几个高频用法读取调度端传来的参数jobContext.GetParameterT(key, 默认值)参数以 JSON 传递自动反序列化输出分级日志Console.Info / Warning / Error三类日志会按颜色展示在 Dashboard绘制进度条Console.WriteProgressBar(名称)返回进度条对象循环里调用SetValue(0-100)即可实时刷新优雅停止重写OnStop方法配合jobContext.CancelToken实现任务取消挂起型 Job 收到停止指令时会先执行OnStop再收尾执行超时保护调度端可为任务配置AgentTimeout毫秒超时后自动取消并上报失败避免任务卡死拖垮执行器。写在最后Hangfire.HttpJob.Agent 用极低的接入成本把「任务调度」和「业务执行」彻底解耦调度端专注编排业务端专注实现两端各自独立部署、独立扩展天然形成一套轻量级分布式Job执行器体系。如果你正在寻找一套让现有 Web 服务快速具备 Hangfire 远程调度能力的方案它值得一试。仓库地址https://gitcode.com/gh_mirrors/ha/Hangfire.HttpJob项目内还自带了 Agent 模板工程见 Template 目录和多套测试示例见 Test 目录照着示例抄作业即可快速跑通全流程。【免费下载链接】Hangfire.HttpJobhttpjob for Hangfire,restful api for Hangfire,job调度与业务分离项目地址: https://gitcode.com/gh_mirrors/ha/Hangfire.HttpJob创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考