HangFire概述
概述
Hangfire允许您以非常简单但可靠的方式在请求处理管道外调用方法。这些方法调用是在后台独立线程中执行的,我们称之为后台任务。
HangFire库实现原理由三个主要组件组成:客户端,存储和服务器。以下是一个小图,描述了Hangfire中的主要进程:
适用平台
Hangfire不受特定.NET应用程序类型的限制。您可以在ASP.NET Web应用程序,non-ASP.NET web applications,控制台应用程序或Windows服务中使用它。以下是适用平台:
- .NET Framework 4.5
- Persistent storage (下面有列出)
- Newtonsoft.Json library ≥ 5.0.1
客户端
您可以使用Hangfire创建任何类型的后台任务:fire-and-forget(释放方法调用),延迟(在一段时间后执行)和循环(按时间循环执行等)。
Hangfire不需要你创建特殊的类。后台任务可以基于常规静态或实例方法调用。如下是实例方法调用:
var client = new BackgroundJobClient(); client.Enqueue(() => Console.WriteLine("Easy!")); client.Delay(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(1));
还有更简单的方法来创建后台任务 - BackgroundJob类
允许您使用静态方法完成方法的创建。如下是静态方法调用:
BackgroundJob.Enqueue(() => Console.WriteLine("Hello!"));
在Hangfire序列化给定信息注并将其保存在持久化库中后,会控制权返回给一调用者。
给定信息:就是传递给HangFire的参数,方法体,执行间隔等
任务存储
HangeFire在一个持久化库保存后台任务和其他涉及后台任务运行的信息。持久化库有助于后台作业在应用程序重新启动后恢复任务列表。这是使用CLR的线程池和Hangfire执行后台任务的主要区别。HangFire支持不同的存储后台:
- SQL Azure, SQL Server 2008 R2 (向后兼容,包括 Express)
- Redis
SQL Server存储可以通过MSMQ或RabbitMQ授权来降低处理延迟。
GlobalConfiguration.Configuration.UseSqlServerStorage("db_connection");
后台服务
后台任务由Hangfire Server 处理。它被实现为一组专用(非线程池的)后台线程,它从存储器中获取作业任务并处理它们。服务器还负责保持存储干净,并自动删除旧数据。
你需要做的是创建一个BackgroundJobServer
类的实例并开始处理一些事情:
using (new BackgroundJobServer()) { Console.WriteLine("Hangfire Server started. Press ENTER to exit..."); Console.ReadLine(); }
Hangfire为每个存储后台使用可靠的提取算法,因此您可以在Web应用程序中启动后台处理程序,而不会在应用程序重新启动或进程终止等情况下丢失后台任务。
总结
原先我们处理后台任务,一般是有自己独立的Windows Service,负责Windows Service的运行,维护后台任务的运行,审计记录,错误处理,还有后台任务有关的参数的保存,现在有了HangFire可以把这些任务都给HangFire,我们只需要处理业务,可以简化我们的工作量。
英文原文:http://docs.hangfire.io/en/latest/index.html
作者: 莫水流
出处: http://www.cnblogs.com/tangxing/
关于作者:专注C#、微信、Html、Js、Abp 请多多赐教!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(516226907@qq.com)咨询.