介绍
Hangfire是.net平台和.net core平台下的一个优秀的开源定时任务框架,它可以方便轻松地将定时任务集成到你的程序中,而且功能强大,。支持CPU和I / O密集型,长期运行和短期运行的后端作业。无需windows服务/任务计划程序。提供redis,SQL Server,SQL Azure和MSMQ持久化的支持。同事还提供了集成了本地化的可视化界面可以优雅的对任务进行手动管理,且支持中文界面。
Github地址
https://github.com/HangfireIO/Hangfire
如何安装使用?
在.net 和.net core的C#应用程序中,最方便我们使用的第三方库管理莫过于Nuget了,因此你可以简单的搜索HangFire,截止发文日期,版本是1.7.6,如下图:
或者在程序包管理器中执行以下命令,两种方式随心所欲
Install-Package Hangfire
快速开始
以下是一个最简单的代码片段,用于配置HangFire,代码是以SQLServer为例的
public void Configuration(IAppBuilder app) { GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>"); app.UseHangfireServer(); app.UseHangfireDashboard(); }
功能简介
本文不涉及如何在具体的应用程序如何调用,以下是对其功能进行简单的介绍,也是官方Github上提及的一些常用功能。
- 即发即消失的任务
BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));
- 延时任务
仅在给定的时间后执行的计划的后台任务
BackgroundJob.Schedule(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(7));
- 重复的定时任务
重复性的任务就是这么简单,只需调用以下方法即可使用CRON表达式执行任何类型的重复任务,由于支持CRON表达式,所以其是支持到秒级的
RecurringJob.AddOrUpdate(() => Console.WriteLine("Transparent!"), Cron.Daily);
- 多任务相互协作
允许多个任务之间相互调度,完成更加复杂的调度任务
var id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello, ")); BackgroundJob.ContinueWith(id, () => Console.WriteLine("world!"));
Web作业
你可以在任何兼容OWIN的应用程序框架中处理后台任务,包括ASP.NET MVC,ASP.NET Web API,FubuMvc,Nancy等。
app.UseHangfireServer();
在控制台应用程序,Windows服务,Azure Worker Role等中:
using (new BackgroundJobServer()) { Console.WriteLine("Hangfire Server started. Press ENTER to exit..."); Console.ReadLine(); }
使用情况
以下一些截图是笔者配置在进行中的项目中的一个实例,简单的对其管理面板有一个了解
- 仪表盘对其任务执行情况一目了然
- 作业队列一览
任务队列包括计划的任务、执行中的任务、完成的任务、失败的任务、删除的任务、以及等待中的任务,
还可以查看执行情况以便于是否需要手动重试
- 周期任务的列表管理
定时的周期性任务,在这里很清晰,而且可以手动执行,笔者目前就干了一件事,因为项目初期手动维护一部分基础数据是很有可能的,为了防止一些基础数据缓存的及时性,在更新完数据库后可手动执行任务重建缓存,目前一个任务定了一个月时间,这样就不必每次都重新启动应用程序了。
- 运行的服务器
由于HangFire是分布式的,可以再仪表盘看到运行的服务器
总结
HangFire绝对是一个值得使用的分布式任务框架,社区版永久免费,即使是商用情况下也是免费的,大多数情况下社区版本已经够用,除非你有非常复杂的任务需要实现,也可以通过收费版本的,支持的功能更强大!如果你还有更好的推荐可以在评论区留言分享!