Hangfire.HttpJob Docker部署实战:调度中心与Agent分离部署的完整教程

发布时间:2026/8/19 21:32:00
Hangfire.HttpJob Docker部署实战:调度中心与Agent分离部署的完整教程 Hangfire.HttpJob Docker部署实战调度中心与Agent分离部署的完整教程【免费下载链接】Hangfire.HttpJobhttpjob for Hangfire,restful api for Hangfire,job调度与业务分离项目地址: https://gitcode.com/gh_mirrors/ha/Hangfire.HttpJobHangfire.HttpJob 是专为 Hangfire 打造的 HTTP 作业调度扩展它让任务调度与业务逻辑彻底解耦调度中心只负责按计划发起 HTTP 请求业务程序则作为独立 Agent 接收请求并执行。本文是一份面向初学者的Hangfire.HttpJob Docker 部署教程手把手带你完成调度中心与 Agent 分离部署全程可视化、可验证适合第一次接触该框架的开发者。为什么选择调度中心与 Agent 分离部署传统定时任务把调度器和业务代码塞在同一个进程里一旦业务膨胀升级、扩容、故障隔离都变得棘手。Hangfire.HttpJob 的分离架构正好解决这些痛点角色职责部署形态调度中心管理作业、触发执行、Dashboard 监控独立 Hangfire Server业务 Agent接收 HTTP 请求真正执行业务代码独立 Web 程序可多实例业务与调度互不影响Agent 升级重启调度中心毫不知情、照常运转弹性伸缩Agent 可以横向扩容调度中心自动分发️故障隔离某个 Agent 崩溃不会拖垮整个调度系统Hangfire.HttpJob 核心能力一览作为调度中心的大脑Hangfire.HttpJob 提供了开箱即用的能力延迟任务通过 HTTP POST 或 Dashboard 一键添加到点自动执行周期任务支持 Cron 表达式灵活定制执行频率RESTful API任何语言都可以通过接口创建作业无需引入 C# 客户端可视化监控执行日志、进度条、耗时、状态一目了然而业务侧的 Agent 支持三种任务生命周期覆盖几乎所有业务场景Transient瞬时任务执行完即结束Singleton单例任务同一时刻只允许一个实例执行HangUntilStop常驻任务持续运行直到收到停止指令三种特性分别由 TransientJobAttribute、SingletonJobAttribute、HangJobUntilStopAttribute 三个特性声明非常直观。部署前准备认识两个核心组件先明确分工调度中心是一个承载 Hangfire Hangfire.HttpJob 的 ASP.NET Core 程序Agent 是引入Hangfire.HttpJob.Agent包的业务 Web 程序。两者通过 HTTP 通信天然适合容器化。在动手前先通过以下命令获取源码可选也可以直接用 NuGet 包git clone https://gitcode.com/gh_mirrors/ha/Hangfire.HttpJob项目中的Test目录自带多个可直接运行的示例例如 MemoryHangfire调度中心和 TestHangfireAgentAgent本文就以它们为蓝本。第一步Docker 化调度中心调度中心的 Docker 化非常简单项目已经内置了现成的 Dockerfile参考 MemoryHangfire/DockerfileFROM mcr.microsoft.com/dotnet/core/aspnet:3.1 COPY . /publish WORKDIR /publish ENV ASPNETCORE_URLShttp://*:5000 EXPOSE 5000 ENTRYPOINT [dotnet, MemoryHangfire.dll]这段配置的精髓在于容器内监听 5000 端口宿主机映射后即可对外服务。如果你使用 SQL Server 存储直接参考 TestSqlserver/Dockerfile其余 Redis、PostgreSql 版本的示例也一应俱全。构建并启动调度中心docker build -t hangfire-center . docker run -d -p 5000:5000 --name hangfire-center hangfire-center启动后调度中心的配置都在 appsettings.json 中管理其中两个关键区块HangfireSettings服务名、Worker 数量、作业队列、Dashboard 登录账号等HttpJobOptions时区、超时时间、邮件/钉钉告警、作业过期天数等建议把IsOpenLogin设为true并配置Users为 Dashboard 加上 Basic 认证防止接口被随意调用。第二步Docker 化业务 AgentAgent 的接入代码极其精简核心只有两行参考 TestHangfireAgent/Startup.csservices.AddHangfireJobAgent(); app.UseHangfireJobAgent();真正重要的是 appsettings.json 中JobAgent节点的配置配置项作用示例值Enabled是否启用 AgenttrueSitemapUrlAgent 站点路径/jobagentEnabledBasicAuth是否开启 Basic 认证trueEnableAutoRegister是否自动注册到调度中心trueRegisterAgentHostAgent 对外地址http://localhost:5002RegisterHangfireUrl调度中心作业接口http://localhost:5000/job写好 Dockerfile 后构建运行docker build -t hangfire-agent . docker run -d -p 5002:80 --name hangfire-agent hangfire-agentAgent 支持多种存储扩展MSSQL、MySQL、PostgreSql、Redis 的 Console 包分别位于 Agent 目录下的对应子项目中按需引入即可。第三步Agent 自动注册与心跳保活分离部署最担心的就是调度中心不知道 Agent 在哪。Hangfire.HttpJob 通过自动注册 心跳机制完美解决自动注册Agent 启动时会自动把自身地址上报给RegisterHangfireUrl指定的调度中心接口心跳保活Agent 持续发送心跳调度中心据此判断 Agent 是否存活Agent 掉线后任务会自动转移到其他可用实例这就意味着你只管docker run新 Agent 实例调度中心会自动发现它无需任何手工配置真正做到了开箱即注册。第四步验证部署效果打开http://localhost:5000/hangfire登录后即可看到作业总览。在 Dashboard 上可以添加延迟作业填写目标 URL、请求方式、延迟时间添加周期作业配置 Cron 表达式实现定时触发查看执行详情包括执行状态、耗时、日志和进度如果能看到任务Succeeded状态和执行日志说明调度中心与 Agent 已经成功握手整个分离部署链路完全打通了。常见问题排查与部署技巧❓Agent 注册不上确认RegisterHangfireUrl指向调度中心/job接口且RegisterHangfireBasicName/Pwd与调度中心配置一致❓任务一直排队不执行检查 Agent 是否存活、心跳是否正常可在调度中心后台查看 Agent 在线状态❓时区错乱在调度中心的HttpJobOptions中设置DefaultTimeZone日志持久化Dockerfile 中已预留volume/opt/hangfire/logs:/publish/Logs注释挂载日志目录便于排查问题多环境隔离通过环境变量覆盖 appsettings 中的连接串和注册地址一套镜像即可部署到测试、生产环境总结通过本文的Hangfire.HttpJob Docker 部署实战你已经掌握了调度中心与 Agent 分离部署的完整流程Docker 化调度中心、独立部署业务 Agent、自动注册与心跳保活、Dashboard 可视化验证。这种架构让定时任务系统具备了高可用、易扩展、强隔离的能力是生产环境的理想选择。现在就动手试试吧【免费下载链接】Hangfire.HttpJobhttpjob for Hangfire,restful api for Hangfire,job调度与业务分离项目地址: https://gitcode.com/gh_mirrors/ha/Hangfire.HttpJob创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考