首页 > 其他分享 >.NET之Hangfire快速入门和使用

.NET之Hangfire快速入门和使用

时间:2024-06-07 10:00:34浏览次数:24  
标签:存储 入门 Hangfire 应用程序 https NET 任务调度

原文地址:.NET之Hangfire快速入门和使用 - 追逐时光者 - 博客园 (cnblogs.com)


前言:

  定时任务调度问题,是一个老生常谈的问题。网上有许多定时任务调度的解决方案,对于我而言很早以前主要是使用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安装: 

?
1 Install-Package Hangfire

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

?
1 2 Install-Package Hangfire.Core Install-Package Hangfire.SqlServer

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

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

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

?
1 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版本的,大家看需求而定

?
1 Install-Package Hangfire.MySqlStorage -Version 1.0.7

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

?
1 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中连接需要使用的存储库:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 public void Configuration(IAppBuilder app) {     //运用SqlServer存储,对应web.config中的connectionStrings中的name     GlobalConfiguration.Configuration.UseSqlServerStorage("sqlserver_connection");<br>                  //注意,当你使用的是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/

 

标签:存储,入门,Hangfire,应用程序,https,NET,任务调度
From: https://www.cnblogs.com/Andy-Blog/p/18236608

相关文章

  • 【C语言从入门到入土】第三章流程控制
    第三章流程控制正式开始对流程控制语句的学习不是你的能力,决定了你的命运,而是你的决定,改变了你的命运。想,都是问题,做,才是答案。站着不动,永远是观众,想到做到,才是王道控制类语句帮助理解1.if()…else…条件语句,层层递进的if(条件){表达式01}else{表......
  • 智能仪表通过Modbus转Profinet网关与PLC通讯方案
    智能仪表通过Modbus转Profinet网关与PLC通讯方案一、功能及优势:Modbus转Profinet网关(XD-MDPN100/300)的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议,支持ModbusRTU主站/从站,并可以与RS485接口的设备,它自带网口......
  • 5分钟入门大模型,就5分钟
    这个是大模型系列课程的第一节。接下来我带着大家一起拥抱新技术,分享的进展不会很快,大概一周一次,有空可以直播讲解或实操。为了照顾那些工程出身,甚至非技术同学,我这个系列会从小白开始,从基础概念入门逐步展开。我不会研究基础大模型,而是会关注应用层,当然也会涉及预训练、知识......
  • 图神经网络GNN实践入门
    参考视频网址:https://www.bilibili.com/video/BV1MP41187pv/?spm_id_from=333.999.0.0&vd_source=590f4019caa7ed7b4e57c0e869ad0867文章目录图神经网络GNN一、GNN的优势1、处理非欧几里得数据2、捕捉节点间的复杂关系3、信息聚合和传递4、适用于各种图相关任务二、G......
  • ChatGPT Prompt技术全攻略-入门篇:AI提示工程基础
    系列篇章......
  • 从零开始的.NET项目(一)仓储模式与配置AutoMapper
    目标框架:.net6.0操作系统:macos编译器:Rider内容:创建第一个Controller,使用仓储(Respository)模式实现,并使用AutoMapper进行数据对象关系映射非常简单的实现,Automapper也只介绍了最基础也最常用的其他用法后续再补,目的就是稳准狠......
  • DotNet8自宿主web服务器搭建记录
    建立3个项目,分别是类库项目ConfigTool.WebSite、webapi项目ConfigTool.TestWebSite、webapi项目ConfigTool.WinService,目标框架均为.NET8。 其中控制台ConfigTool.TestWebSite方便开发调试,win服务ConfigTool.WinService作为宿主服务,类库ConfigTool.WebSite为自定义web服务器的......
  • 【入门教程】5分钟教你快速学会集成Java springboot ~
    介绍ApacheDolphinScheduler是一个分布式易扩展的开源分布式调度系统,支持海量数据处理,具有任务流程调度、任务流程编排、任务监控告警、工作流引擎等功能。本文将介绍如何将ApacheDolphinScheduler集成到JavaSpringboot项目中,以实现更灵活和便捷的调度功能。步骤步骤一:添......
  • Netty 快速入门
    什么是NettyNetty的官网:[https://netty.io/Netty是一个JavaNIO技术的开源异步事件驱动的网络编程框架,用于快速开发可维护的高性能协议服务器和客户端。往通俗了讲,可以将Netty理解为:一个将JavaNIO进行了大量封装,并大大降低JavaNIO使用难度和上手门槛的网络编程框架。Net......
  • OPA Gatekeeper:Kubernetes的策略和管理
    目录一.系统环境二.前言三.OPAGatekeeper简介四.在kubernetes上安装OPAGatekeeper五.gatekeeper规则5.1使用gatekeeper禁止某些网站的镜像创建pod5.2使用gatekeeper禁止创建LoadBalancer类型的Services服务六.总结一.系统环境本文主要基于Kubernetes1.22.2和Linux操作系统Ub......