.NET之Hangfire快速入门和使用

前言:

  定时任务调度问题,是一个老生常谈的问题。网上有许多定时任务调度的解决方案,对于我而言很早之前主要是使用Window计划和Window服务来作任务定时执行,而后就开始使用定时任务调度框架Quartz.Net。可是却一直没有上手过Hangfire这个自带后台任务调度面板,能够在后台手动执行任务的神奇的任务调度框架。前段时间终于开始对他下手了,经过在网上查阅了一些资料和查看了Hangfire在Github中的demo,终于在我本身的项目中用上了Hangfire。在该篇文章中主要简单介绍一下什么是Hangfire,Hangfire的基本特征与优势和分别使用MySQL,MS SQL Server做为存储使用。html

1、Hangfire是什么:

  Hangfire是一个开源的.NET任务调度框架,提供了内置集成化的控制台,能够直观明了的查看做业调度状况,而且Hangfire不须要依赖于单独的应用程序执行(如:windows服务,window计划)。而且支持持久性存储。mysql

2、Hangfire使用条件:

Hangfire与特定的.NET应用程序类型无关。您能够在ASP.NET Web应用程序,非ASP.NET Web应用程序,控制台应用程序或Windows服务中使用它。如下是要求:git

1.NET Framework 4.5github

2.永久存储(Hangfire将后台做业和其余与处理有关的信息保留在永久性存储器中,因此须要存储库来存储如:MS SQL Server,Redis,MySQL,PostgreSql等)web

3.Newtonsoft.Json库≥5.0.1sql

3、Hangfire的基本特征与优势:

经过官网中的一张图片即可知道它是一个多么优秀的任务调度框架,以下图所示:数据库

 

 

4、Hangfire安装和使用:

在NuGet上有关于Hangfire的 一系列软件包:

详情地址: https://www.nuget.org/packages?q=Hangfirewindows

经过在程序包管理控制台中输入安装命令安装Hangfire所需NuGet包:

使用MS SQL Server做为存储时咱们须要安装的NuGet:

 在ASP.NET 应用程序下使用Hangfire安装: app

Install-Package Hangfire

在控制台应用程序或者window server中处理做业:框架

Install-Package Hangfire.Core
Install-Package Hangfire.SqlServer

注意,在控制台应用程序或者window server中不推荐直接安装:Install-Package Hangfire ,由于它只是一个快速启动软件包,并包含您可能不须要的依赖项(例如,Microsoft.Owin.Host.SystemWeb等无关依赖项)。

使用MySQL做为存储时咱们须要安装的NuGet:

 在ASP.NET 应用程序下使用Hangfire安装: 

 Install-Package Hangfire.Core 

咱们还须要安装一个MySql存储(Hangfire.MySqlStorage)的拓展,注意由于Hangfire自己是不支持MySQL存储的,这是名为:Arnoldas Gudas做者拓展的

Nuget地址:https://www.nuget.org/packages/Hangfire.MySqlStorage/

安装命令:

注意:由于个人项目是.NET Framework,Version=v4.5.1版本的,因此只能安装1.0.7版本的,你们看需求而定

Install-Package Hangfire.MySqlStorage -Version 1.0.7

当咱们要使用(宿主)IIS托管ASP.NET应用程序时,咱们还须要安装:

Install-Package Microsoft.Owin.Host.SystemWeb -Version 4.0.1

 

添加和配置OWIN Startup.cs,及其链接对应的存储数据库:

添加OWIN Startup.cs

  这里是当你的项目中不存在Startup.cs时才须要执行添加的操做!

什么是OWIN Startup.cs:

简单概述:是.NET 平台开放的web接口,Startup则是.Net与web通信管道,起到转发,沟通的做用。

详情介绍:http://www.javashuo.com/article/p-uyrrlmzs-ch.html

在Startup.cs中链接须要使用的存储库:

        public void Configuration(IAppBuilder app)
        {
            //运用SqlServer存储,对应web.config中的connectionStrings中的name
            GlobalConfiguration.Configuration.UseSqlServerStorage("sqlserver_connection");
//注意,当你使用的是MySql做为存储时,须要以下配置 //运用MySql存储,对应web.config中的connectionStrings中的name GlobalConfiguration.Configuration.UseStorage(new MySqlStorage("mysql_connection")); app.UseHangfireDashboard();//配置后台仪表盘 app.UseHangfireServer();//开始使用Hangfire服务 }

Web.config数据库链接配置:

1.MS SQL Server中:

<connectionStrings>
  <add name="sqlserver_connection" connectionString="Data Source=.;Initial Catalog=MyFirstDb;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

 

2.MySQL中:

<connectionStrings>
 <add name="mysql_connection" providerName="System.Data.MySqlClient" connectionString="Server=123.xxx.xxx.xx;Port=3306;Database=MyFirstDb;Uid=root;Pwd=youpassword;charset=utf8;SslMode=none;Allow User Variables=True" />
</connectionStrings>

 

运行程序,访问调度控制面板:

  当咱们已经完成了上面的相关配置后,且程序可以正常无bug的运行时,咱们的Hangfire Dashboard(仪表盘)在咱们的本地就能够正常访问了(Hangfire仪表盘默认只支持本地访问),假如须要远程可访问的话咱们还须要作对应的配置受权操做!  

运行成功,查看数据库中是否生成了与Hangfire相关的表:

  首次运行成功后,打开数据库能够看到Hangfire已经自动为咱们建立了定时任务的一些定时任务列表,定时队列,服务,状态等相关的数据表(展示了Hangfire做用的持久化特性),以下图所示:

a.MS SQL Server中生成的表:

 

 b.MySQL中生成的表:

 

 访问调度控制面板:

本地访问方式:https://localhost:端口号/hangfire/

调度控制面板效果图:

 

 后台经常使用任务调度建立和使用:

注意:WriteLog是本身封装的一个通用记录日志的方法!

//支持基于队列的任务处理:任务执行不是同步的,而是放到一个持久化队列中,以便立刻把请求控制权返回给调用者。
var jobId = BackgroundJob.Enqueue(()=>WriteLog("队列任务执行了!"));

//延迟任务执行:不是立刻调用方法,而是设定一个将来时间点再来执行,延迟做业仅执行一次
var jobId = BackgroundJob.Schedule(()=>WriteLog("一天后的延迟任务执行了!"),TimeSpan .FromDays(1));//一天后执行该任务

//循环任务执行:一行代码添加剧复执行的任务,其内置了常见的时间循环模式,也可基于CRON表达式来设定复杂的模式。【用的比较的多】
RecurringJob.AddOrUpdate(()=>WriteLog("每分钟执行任务!"), Cron.Minutely); //注意最小单位是分钟

//延续性任务执行:相似于.NET中的Task,能够在第一个任务执行完以后紧接着再次执行另外的任务
BackgroundJob.ContinueWith(jobId,()=>WriteLog("连续任务!"));

总结:

  经过本次项目实践的确让我感觉到了Hangfire的魅力所在,真的能够说是上手简单,开箱即用的一个任务调度框架。而且该框架作的最好的是,官方文档详细,而且还提供了完整的demo示例。最后要为Hangfire的做者点赞!

Hangfire相关使用学习资料:

官网地址:https://www.hangfire.io/

GitHub源码:https://github.com/HangfireIO/Hangfire

中文文档:https://www.bookstack.cn/read/Hangfire-zh-official/README.md 

GitHub使用示例源码:https://github.com/HangfireIO/Hangfire.Samples(包括控制台应用程序,window服务,ASP.NET MVC,WebForm)

Hangfire使用文章汇总:https://www.bbsmax.com/R/xl56E0nrJr/

相关文章
相关标签/搜索