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 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

 

posted @ 2017-04-01 10:51  莫水流  阅读(2815)  评论(0编辑  收藏  举报