本文转载自微信公众号《后端Q》,作者柯南。转载请联系后台Q公众号。要求Hangfire适用于大多数.NET平台:.NETFramework4.5或更高版本、.NETCore1.0或更高版本,或与.NETStandard1.3兼容的任何平台。您可以将它与几乎任何应用程序框架集成,包括ASP.NET、ASP.NETCore、控制台应用程序、Windows服务、WCF和社区驱动的框架,如Nancy或ServiceStack。StorageStorage是Hangfire保存与后台作业处理相关的所有信息的地方。类型、方法名称、参数等所有详细信息都被序列化并存储起来,进程的内存中不保留任何数据。存储子系统在Hangfire中得到了很好的抽象,可以为RDBMS和NoSQL解决方案实现。这是您必须做出的主要决定,也是您可以开始使用该框架之前唯一需要的配置。以下示例显示如何使用SQLServer数据库配置Hangfire。请注意,连接字符串可能因您的环境而异。GlobalConfiguration.Configuration.UseSqlServerStorage(@"Server=.\SQLEXPRESS;Database=Hangfire.Sample;IntegratedSecurity=True");ClientClient负责创建后台作业并将其保存到Storage。后台作业是应该在当前执行上下文之外执行的工作单元,例如在后台线程中、在另一个进程中,甚至在不同的服务器上——所有这一切都可以通过Hangfire实现,即使没有额外的配置。BackgroundJob.Enqueue(()=>Console.WriteLine("Hello,world!"));请注意,这不是委托,而是表达式树。Hangfire不是立即调用方法,而是序列化类型(System.Console)、方法名称(WriteLine,以及所有参数类型以便稍后识别)和所有给定的参数并将其放入存储中。服务器HangfireServer通过查询商店来处理后台作业。粗略地说,它是一组后台线程,它们监听Storage以获取新的后台作业,并通过反序列化类型、方法和参数来执行它们。您可以将此后台作业服务器放置在您想要的任何进程中,包括像ASP.NET这样的危险进程-即使您终止了一个进程,您的后台作业也会在重启后自动重试。因此,在Web应用程序的基本配置中,您不再需要使用Windows服务进行后台处理。using(newBackgroundJobServer()){Console.ReadLine();}安装Hangfire作为几个NuGet包分发,从包含所有主要类和抽象的主要Hangfire.Core开始。其他包如Hangfire.SqlServer提供功能或抽象实现。要开始使用Hangfire,请安装主包并选择可用存储之一。VisualStudio2017发布后,出现了一种新的安装NuGet包的方式。所以我放弃了列出安装NuGet包的所有方法,转而使用几乎随处可用的dotnet应用程序。dotnetaddpackageHangfire.CoredotnetaddpackageHangfire.SqlServer配置使用GlobalConfiguration类进行配置。它的Configuration属性提供了许多扩展方法,既有来自Hangfire.Core的,也有来自其他包的。如果您安装了一个新包,请不要犹豫检查新的扩展方法。GlobalConfiguration.Configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170).UseSimpleAssemblyNameTypeSerializer().UseRecommendedSerializerSettings().UseSqlServerStorage("Database=Hangfire.Sample;IntegratedSecurity=True;",newSqlServerStorageOptions{CommandBatchMaxTimeout=TimeSpan.FromFromMinutes.Timeout=TimeSpan.FromFromMinutes..Timeout=TimeSpanibility.TimeSlidingInvisibility(5).(5)、QueuePollInterval=TimeSpan.Zero,UseRecommendedIsolationLevel=true,UsePageLocksOnDequeue=true,DisableGlobalLocks=true}).UseBatches().UsePerformanceCounters();方法调用可以链式调用,因此无需反复使用类名。全局配置是为了简单起见,几乎每个Hangfire类都允许您指定覆盖存储、过滤器等。在ASP.NETCore环境中,全局配置类隐藏在AddHangfire方法中。用法下面是所有运行的Hangfire组件,作为打印“Hello,world!”的完整工作示例。来自后台线程的消息。您可以注释与服务器相关的行并多次运行程序-一旦您再次取消注释这些行,所有后台作业将被处理。usingSystem;usingHangfire;usingHangfire.SqlServer;namespaceConsoleApplication2{classProgram{staticvoidMain(){GlobalConfiguration.Configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170).UseColouredConsoleLogProvider().UseSimpleAssemblyNameTypeSerializer().UseRecommendedSerializerSettings().UseSqlServerStorage("数据库=Hangfire=IntegratedSampleTrue;",newSqlServerStorageOptions{CommandBatchMaxTimeout=TimeSpan.FromMinutes(5),SlidingInvisibilityTimeout=TimeSpan.FromMinutes(5),QueuePollInterval=TimeSpan.Zero,UseRecommendedIsolationLevel=true,UsePageLocksOnDequeue=true,DisableGlobalLocks=true});BackgroundJob.Enqueue(()=>Console.WriteLine("Hello,world!"));using(varserver=newBackgroundJobServer()){Console.ReadLine();}}}}
