执行后台任务的利器——Hangfire

Hangfire是一个开源且商业无偿使用的工具函数库。可让你很是容易地在ASP.NET应用(也能够不在ASP.NET应用)中执行多种类型的后台任务,而无需自行定制开发和管理基于Windows Service后台任务执行器。且任务信息能够被持久保存。内置提供集成化的控制台。服务器

经过Nuget就能够在你的应用程序中安装Hangfire:Install-Package Hangfire并发

Hangfire的具备以下特性和有点:函数

  • 支持基于队列的任务处理:任务执行不是同步的,而是放到一个持久化队列中,以便立刻把请求控制权返回给调用者。使用方法:BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));
  • 延迟任务执行:不是立刻调用方法,而是设定一个将来时间点再来执行。使用方法:BackgroundJob.Schedule(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(7));
  • 循环任务执行:只须要简单的一行代码就能够添加剧复执行的任务,其内置了常见的时间循环模式,也能够基于CRON表达式来设定复杂的模式。使用方法:RecurringJob.AddOrUpdate(() => Console.WriteLine("Transparent!"), Cron.Daily);
  • 持久化保存任务、队列、统计信息:默认使用SQL Server,也能够配合消息队列来下降队列处理延迟,或配置使用Redis来得到更好的性能表现
  • 内置自动重试机制:能够设定重试次数,还能够手动在控制台重启任务
  • 除了调用静态方法外还支持实例方法
  • 可以捕获多语言状态:便可以把调用者的Thread.CurrentCulture和Thread.CurrentUICulture信息同任务持久保存在一块儿,以便任务执行的时候多语言信息是一致的
  • 支持任务取消:使用CancellationToken这样的机制来处理任务取消逻辑
  • 支持IoC容器:目前支持Ninject和Autofac比较经常使用的开源IoC容器
  • 支持Web集群:能够在一台或多台机器上运行多个Hangfire实例以便实现冗余备份
  • 支持多队列:同一个Hangfire实例能够支持多个队列,以便更好的控制任务的执行方式
  • 并发级别的控制:默认是处理器数量的5倍工做行程,固然也能够本身设定
  • 具有很好的扩展性:有不少扩展点来控制持久存储方式、IoC容器支持等

为何要使用Hangfire这样的函数库呢?我以为好处有以下几个方面:工具

  1. 开发简单:无需本身额外作开发,就能够实现任务的队列执行、延迟执行和重复执行
  2. 部署简单:能够同主ASP.NET应用部署在一块儿,测试和维护都相对简单
  3. 迁移简单:因为宿主不只限于ASP.NET,那么将来能够很是容易的把任务执行器放到其余地方(须要改变的就是在其余宿主中启动Hangfire服务器)
  4. 扩展简单:因为开源且有不少扩展点,在现有插件都不知足本身须要的状况下可以容易的进行扩展

以前我把Hangfire运用到两种状况下:post

  1. 后台长时间的科学计算:这样就可让请求立刻返回给客户端,后台完成长时间计算后,用SignalR实时提醒用户
  2. 后台群发邮件:经过延迟和循环任务分批经过SendCloud这样的服务发送群发邮件

固然,Hangfire的应用场景还不少,好比在后台处理电商卖家的订单。性能

相关文章
相关标签/搜索