NET任务调度框架Hangfire使用指南
Hangfire 是一个开源的 .NET 任务调度框架,它允许开发人员轻松地将长时间运行的任务、定时任务和其他后台处理从主线程中分离出来,以提高应用程序的响应速度和性能
1. 安装 Hangfire
首先,需要一个 ASP.NET Core 项目。通过 NuGet 安装 Hangfire:
Install-Package Hangfire
同时,根据需要安装 Hangfire 支持的数据库驱动,例如 SQL Server 或 Redis。
2. 配置 Hangfire
在 Startup.cs 文件中配置 Hangfire:
public void ConfigureServices(IServiceCollection services)
{
// 添加 Hangfire 服务,并配置使用 SQL Server 作为持久化存储
services.AddHangfire(x => x.UseSqlServerStorage("connection_string"));
// 添加 Hangfire 服务器,后台处理任务的核心服务
services.AddHangfireServer();
}
public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs)
{
// 使用 Hangfire Dashboard,允许在浏览器中查看任务的执行情况
app.UseHangfireDashboard();
// 创建一个 Fire-and-forget 类型的后台任务,即立即执行一次
backgroundJobs.Enqueue(() => Console.WriteLine("Hello Hangfire!"));
}
3. Hangfire 的任务类型
- 立即执行的任务(Fire-and-forget):
var backgroundJobs = app.Services.GetService<IBackgroundJobClient>();
// 解析服务并使用
// 创建一个 Fire-and-forget 类型的后台任务,即立即执行一次
backgroundJobs.Enqueue(() =>
Console.WriteLine("Hello Hangfire!,后台任务,即立即执行一次"));
- 延迟任务(Delayed jobs):
// 延迟任务,1 分钟后执行
backgroundJobs.Schedule(() =>
Console.WriteLine("延迟任务,1 分钟后执行"),
TimeSpan.FromMinutes(1));

- 周期性任务(Recurring jobs):
//周期性任务,每天执行一次
RecurringJob.AddOrUpdate("easyjob", () =>
Console.WriteLine("Easy!:周期性任务,每天执行一次"),
Cron.Daily);
//周期性任务 ,corn表达式
RecurringJob.AddOrUpdate("powerfuljob",
() => Console.WriteLine("Powerful!,周期性任务:每秒执行一次"),
"0/1 * * * * ? "); //每秒执行一次【https://cron.ciding.cc】

4. 访问 Hangfire Dashboard
app.UseHangfireDashboard();
配置完成后,你可以通过访问 http://localhost:5000/hangfire 来查看 Hangfire Dashboard,监控任务的执行情况。

5. 安全性
在生产环境中,你需要为 Hangfire Dashboard 设置权限验证。可以通过实现 IDashboardAuthorizationFilter 接口来自定义授权逻辑。
Install-Package Hangfire.Dashboard.Authorization
public class BasedAuthorizationFilter : IDashboardAuthorizationFilter
{
public bool Authorize([NotNull] Hangfire.Dashboard.DashboardContext context)
{
if (context.GetHttpContext().Request.Host.ToString().StartsWith("localhost"))
{
return true;
}
// 检查 context 参数是否为 null
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
// 获取当前请求的用户标识
var httpContext = context.GetHttpContext();
var authUser = httpContext?.User;
// 这里可以根据需要实现具体的授权逻辑
// 检查用户是否在某个角色内,或者是否有特定的权限标记
bool isAuthorized = authUser?.Identity?.IsAuthenticated == true
&& authUser.IsInRole("YourRoleName"); // 替换 "YourRoleName" 为实际的角色名称
return isAuthorized;
}
}
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new List<IDashboardAuthorizationFilter> { new BasedAuthorizationFilter() }
}); // 设置 Dashboard 的 URL
6. Hangfire 扩展:HttpJob
Hangfire.HttpJob 是一个扩展组件,它允许将 Hangfire 的任务调度和业务逻辑分离。这意味着业务逻辑可以作为独立的 Web API 暴露给 Hangfire 进行调度,从而实现解耦。下面是一些关键点:
- 项目地址:Hangfire.HttpJob GitHub。
- 目的:剥离 Job 调度和业务,使得业务开发者可以忽略 Hangfire 的存在,不同业务线可以独立部署 Job 代理,互不影响。
- 技术特性:支持延迟任务、周期性任务、任务管理、Cron 生成器和任务代理扩展。
- 应用场景:适用于定时任务、后台作业、周期性任务和微服务架构中的任务调度。
7. 其他资源
- 官网地址:Hangfire Documentation
- GitHub源码:HangfireIO/Hangfire
- 中文文档:Hangfire-zh-official
欢迎关注我的公众号“Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。
NET任务调度框架Hangfire使用指南的更多相关文章
- 开源的.NET任务调度框架-HangFire
什么是Hangfire Hangfire 是一个开源的.NET任务调度框架,目前1.6+版本已支持.NET Core.内置提供集成化的控制台,方便后台查看及监控: 另外,Hangfire包含三大核心组 ...
- .NET Core下开源任务调度框架Hangfire的Api任务拓展(支持秒级任务)
HangFire的拓展和使用 看了很多博客,小白第一次写博客. 最近由于之前的任务调度框架总出现问题,因此想寻找一个替代品,之前使用的是Quartz.Net,这个框架方便之处就是支持cron表达式适合 ...
- 任务调度框架Hangfire 简介
任务调度是我们项目中常见的功能,虽然任务调度的功能实现本身并不难,但一个好用的轮子还是可以给我们的开发的效率提升不少的. 在.net环境中,较为有名的任务调度框架是HangFire与Quartz.NE ...
- .NET Core下开源任务调度框架Hangfire
今天无意中发现了一个很好用的任务调度框架.Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在 .net core的环境中,由Core自带的DI管理着生命周期. 相较于qu ...
- 任务调度框架FluentScheduler简介
之前我在文章中介绍过.net中的任务调度框架Hangfire,HangFire虽然本身输入比较简单好用的,但是,如果我们的程序本身提供的服务不是任务调度,而任务调度只是里面并不重要的小功能的时候,用H ...
- Hangfire .NET任务调度框架实例
1.介绍 Hangfire是一个开源的.NET任务调度框架,提供了内置集成化的控制台(后台任务调度面板),可以直观明了的查看作业调度情况. 2.Nuget安装 3.编写代码 1)测试服务:FirstS ...
- 【niubi-job——一个分布式的任务调度框架】----niubi-job这下更牛逼了!
niubi-job迎来第一次重大优化 niubi-job是一款专门针对定时任务所设计的分布式任务调度框架,它可以进行动态发布任务,并且有超高的可用性保证. 有多少人半夜被叫起来查BUG,结果差到最后发 ...
- 【niubi-job——一个分布式的任务调度框架】----安装教程
niubi-job是什么 niubi-job是LZ耗时三个星期,费尽心血打造的一个具备高可靠性以及水平扩展能力的分布式任务调度框架,采用quartz作为底层的任务调度管理器,zookeeper做集群的 ...
- Quarzt.NET 任务调度框架
Quartz.NET是一个开源的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性 ...
- Quartz.Net任务调度框架
Quartz.Net是一个开源的任务调度框架,非常强大,能够通过简单的配置帮助我们定时具体的操作. 相对于我们用的线程里面while(true)然后sleep来执行某个操作,应该算的上是高端,大气,上 ...
随机推荐
- ASP.NET Core – Partial View
前言 之前写过一篇 ASP.NET Core – View Component 里面有提到, View Component 是 Partial View 的加强版. 多了一个 .cs 可以写逻辑. 那 ...
- EntityFramework Core并发迁移解决方案
场景 目前一个项目中数据持久化采用EF Core + MySQL,使用CodeFirst模式开发,并且对数据进行了分库,按照目前颗粒度分完之后,大概有一两百个库,每个库的数据都是相互隔离的. 借鉴了G ...
- 多表查询 —— 内连接&外连接&子查询
连接查询 内连接 1.查询语法 -- 隐式内连接 select 字段列表 from 表1, 表2... where 条件; -- 显式内连接 select 字段列表 from 表1 [INNER] j ...
- 多线程ExecutorService 的理解与使用
原文链接:https://www.cnblogs.com/gxz-sw/p/6754476.html 接口 Java.util.concurrent.ExecutorService 表述了异步执行的机 ...
- Flutter(able) 的单例模式
文/ 杨加康,CFUG 社区成员,<Flutter 开发之旅从南到北>作者,小米工程师 单例设计模式(Singleton Design Pattern)理解起来非常简单. 一个类只允许创建 ...
- CentOS 7.9安装ElasticSearch7.14.0、ElasticSearch-Head、Kibana、Node14.18.2
CentOS 7.9安装ElasticSearch7.14.0.ElasticSearch-Head.Kibana.Node14.18.2 1.安装文件 1. elasticsearch-7.14 ...
- Kernel调试追踪技术之 Kprobe on ARM64
kprobe是什么? kprobe 是一种动态调试机制,用于debugging,动态跟踪,性能分析,动态修改内核行为等,2004年由IBM发布,是名为Dprobes工具集的底层实现机制[1][2],2 ...
- 后台管理系统tabs栏切换思路
页面内容: 使用 element-ui 实现 tabs 标签页 :https://element.eleme.cn/#/zh-CN/component/tabs#tab-pane-attributes ...
- KubeSphere 部署 Kafka 集群实战指南
本文档将详细阐述如何利用 Helm 这一强大的工具,快速而高效地在 K8s 集群上安装并配置一个 Kafka 集群. 实战服务器配置(架构 1:1 复刻小规模生产环境,配置略有不同) 主机名 IP C ...
- 云原生周刊:2024 扩展 K8s 集群指南 | 2024.1.2
开源项目推荐 Jib Jib 无需 Docker 守护进程,也无需深入掌握 Docker 最佳实践,即可为您的 Java 应用程序构建优化的 Docker 和 OCI 映像.它可作为 Maven 和 ...