前言:

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

一、Hangfire是什么:

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

二、Hangfire使用条件:

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

1.NET Framework 4.5

2.永久存储(Hangfire将后台作业和其他与处理有关的信息保留在永久性存储器中,所以需要存储库来存储如:MS SQL Server,Redis,MySQL,PostgreSql等)

3.Newtonsoft.Json库≥5.0.1

三、Hangfire的基本特征与优点:

通过官网中的一张图片便可知道它是一个多么优秀的任务调度框架,如下图所示:

四、Hangfire安装和使用:

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

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

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

使用MS SQL Server作为存储时我们需要安装的NuGet:

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

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通讯管道,起到转发,沟通的作用。

详情介绍:https://www.cnblogs.com/wj033/p/6065145.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());//一天后执行该任务 //循环任务执行:一行代码添加重复执行的任务,其内置了常见的时间循环模式,也可基于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/

.NET之Hangfire快速入门和使用的更多相关文章

  1. HangFire快速入门 分布式后端作业调度框架服务

    安装 NuGet 上有几个可用的Hangfire 的软件包.如果在ASP.NET应用程序中安装HangFire,并使用Sql Server作为存储器,那么请在Package Manager Conso ...

  2. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  3. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  4. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  5. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  8. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  9. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. CSS3 translate导致字体模糊

    今日客户反馈,发现 使用了 translate会导致字体模糊. .media-body-box{ @media all and (min-width: 992px){ position: absolu ...

  2. 01_liteide 集成环境运行的问题

    //go语言是以包为管理单位 //每个文件必须先声明包 //程序必须有一个main包 package main import (  "fmt" ) //入口函数 func main ...

  3. MSIL实用指南-创建对象

    创建对象用Newobj指令,它的操作是创建一个新的对象或值类型,并将对象引用的新实例到计算堆栈上.格式是Newobj <构造函数>实例: ilGenerator.Emit(OpCodes. ...

  4. VS2019没有.net core3.0模板的解决办法

    今天装好了,net core sdk 3.0之后,打开Visual Studio2019后,新建项目时发现尽然没有.net core3.0的模板. 搜了下其他博主的文章,按照文章里做了如下设置:   ...

  5. Installing the JMeter CA certificate for HTTPS recording

    参考: http://jmeter.apache.org/usermanual/component_reference.html#HTTP(S)_Test_Script_Recorder User m ...

  6. CodeForces-38B-Chess枚举+思维

    CodeForces-38B-Chess 这是一道与下象棋有关的题目,题意是给你一个车和马的坐标,然后再给你一个马,让你判断最后三者都不会被吃掉的可能性,注意的是三者是三个独立的个体. 这道题要知道一 ...

  7. POJ-1222EXTENDED LIGHTS OUT-位运算枚举模板

    传送门:http://poj.org/problem?id=1222 题意:开关灯问题,一幅开关的灯中,给出一种操作,使得灯全关掉,(操作一个开关,相邻的灯也会改变) 思路:利用位运算枚举第一行: # ...

  8. 创建最简单的exe形式COM组件并在MFC程序调用

    来新公司学习接手新项目,拿到代码打开解决方案看到里面竟然有40几个工程,有点吃惊.具体看代码也有很多之前没见过的写法,上了几天火. 有件事就没太搞明白,按照文档的说法上层很多软件都要调用IO服务器,但 ...

  9. 精品自用IDEA插件吐血推荐

    Alibaba Java Coding Guidelines 该插件集成了Alibaba代码编程规范,可以帮你找出你的代码怪味道 .gitignore 当你使用Git作为版本工具的时候,想要快速的添加 ...

  10. Flink文章测试

    Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 ...