hangfire oracle,.net core 之Hangfire任务调度
Hangfire可用作任务调度,类似延迟任务、队列任务、批量任务和定时任务等。
一、nuget Hangfire包
找到Hangfire.AspNetCore和Hangfire.SqlServer包,可以在nuget面板中找到或直接像如下方式安装:
Install Package Hangfire.AspNetCore
Install Package Hangfire.SqlServer
二、在Startup.cs文件中加入以下代码:
写一个Hangfire的扩展类,如下所示:
public static classHangFireModule
{public static IApplicationBuilder UseHangfire(thisIApplicationBuilder app)
{
app.UseHangfireServer();
app.UseHangfireDashboard();returnapp;
}public static IServiceCollection AddHangfire(thisIServiceCollection services)
{
services.AddHangfire(x=> x.UseSqlServerStorage(ConfigurationSetting.Configuration["ConnectionString:MyDb_Hangfire"]));returnservices;
}
}
在Startup的ConfigureServices方法中,加入services.AddHangfire();
在Startup的Configure方法中,加入app.UseHangfire();
三、自动加入任务
1.在当前模块中,新创建一个名为IHangfireTask的接口,将其注册为瞬时生命周期服务。我们将要实现的是,从此以后,继承该接口的类型都会被自动加入到任务调度中。
///
///Hangfire任务接口,任何继承该接口的都会加入到Hangfire任务///
public interfaceIHangfireTask : ITransient {///
///运行hangfire任务///
voidRun();
}
ITransient接口的作用就是,将所有继承ITransient的接口和类型注册为瞬时生命周期的服务。
2.在HangFireModule中新增一个UseHangfireTask扩展方法,目的是在Startup的Configure方法中使用,在程序启动的时候就执行该方法。
//运行Hangfire任务
public static void UseHangfireTask(thisIApplicationBuilder app) {//找到继承了IHangfireTask接口的实例
IList list = ServiceLocator.Services.GetServices()?.ToList();if (list?.Count > 0) {foreach (var item inlist) {
item.Run();
}
}
}
加入到Startup的Configure方法中:
public voidConfigure(IApplicationBuilder app, IHostingEnvironment env,IServiceProvider serviceProvider)
{
ServiceLocator.SetServices(serviceProvider);if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}else{
app.UseExceptionHandler();
}
app.UseMvc();
app.UseSwagger();
app.UseSwaggerUi();
app.UseHangfire();
app.UseHangfireTask();
}
如此这样,我们就做到了在程序刚启动时,程序就会自动去找到继承自IHangfireTask接口的所有类型并运行它们的Run()方法。
我们可以在Run()方法中实现诸如Hangfire的BackgroundJob或RecurringJob等任务。
接下来我们就用代码来实现一下!
我们现在想实现一个定时任务,则看如下代码:
public classRecurringTask:IHangfireTask
{private log4net.ILog log => LogHelper.Log4NetInstance.LogFactory(typeof(RecurringTask));public voidRunTask()
{
log.Info("每分钟执行一次定时任务");
}public voidRun()
{
RecurringJob.AddOrUpdate(()=> RunTask(), "* * * * *");
}
}
这里有一个地方需要注意,在使用RecurringJob或BackgroundJob的时候,就例如()=> RunTask()这个,RunTask方法的访问修饰符必须是public。如果有必要,尽量在RunTask方法内被调用的其他方法的访问修饰符也定义为public。
在Hangfire中,Cron表达式包含五个字段:分钟、小时、日期、月份、周,因此定时任务最低也只能是一分钟,没有秒数可供选择。
接下来我们看看程序运行的结果:
四、Hangfire的基本任务
1. BackgroundJob.Enqueue
作用:将一个任务放入到某个持久化的队列中并挨个执行,以便程序可以继续执行其他代码。该任务只执行一次。
实现:BackgroundJob.Enqueue(() => RunTask());
2. BackgroundJob.Schedule
作用:将一个任务延迟到某个时间点后执行。
实现:BackgroundJob.Schedule(() => RunTask(), TimeSpan.FromSeconds(30));
即在30秒后才执行RunTask()方法。
3. RecurringJob.AddOrUpdate
作用:重复执行一个任务,一般用作定时任务处理。
实现:RecurringJob.AddOrUpdate(()=> RunTask(), "* * * * *");
即每分钟都执行一次RunTask()方法。
4. BackgroundJob.ContinueWith
作用:类似工作流的形式,将多个任务连接起来按照顺序执行。
实现:
string jobId = BackgroundJob.Schedule(() => Console.WriteLine("第一个任务"),TimeSpan.FromSeconds(10));
BackgroundJob.ContinueWith(jobId, () => RunTask());
注意:以上RunTask()方法的访问修饰符必须是public。
hangfire oracle,.net core 之Hangfire任务调度相关推荐
- .NET之Hangfire快速入门和使用 (定时任务调度的一种解决方案)
注意: 1. 当Hangfire服务由Web程序来启用时,默认情况下,web应用程序中的Hangfire服务器实例在第一个用户访问您的站点之前不会启动.甚至,有一些事件会在一段时间后导致web应用程序 ...
- 使用ASP.NET Core和Hangfire实现HTTP异步化方案
Hi,大家好,我是Payne,欢迎大家一如既往地关注我的博客.今天这篇博客里的故事背景,来自我工作中的一次业务对接,因为客户方提供的是长达上百行的XML,所以一度让更喜欢使用JSON的博主感到沮丧,我 ...
- ASP.NET Core 使用 Hangfire 定时任务
定时任务组件,除了 Hangfire 外,还有一个 Quarz.NET,不过 Hangfire .NET Core 支持的会更好些. ASP.NET Core 使用 Hangfire 很简单,首先,N ...
- ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十四节--后台工作者HangFire与ABP框架Abp.Hangfire及扩展...
返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 HangFire与Quartz.NET相比主要是HangFire的内置提供集成化的控制台,方便后台查看及监控,对于 ...
- hangfire支持mysql_快速入门 - Hangfire.HttpJob 中文文档
先介绍下 Hangfire.HttpJob 自身引用的组件 Hangfire.AspNetCore (因为Hangfire.HttpJob是作为Hangfire的插件,Hangfire.AspNetC ...
- Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle
使用.net core也有一段时间了,一直都没有Oracle官方的正式版驱动程序,更别说EF版本了.之前基于Oracle官方的.net core预览版本写了个Dapper的数据库操作实现,但是总感觉不 ...
- c odp.net连oracle,.NET Core 使用ODP.NET Core连接操作Oracle数据库
1、使用必要条件 1) 安装Microsoft Visual Studio 2017或更高版本. 2) 安装Oracle Database 12c或更高版本. 2、ODP.NET Core安装配置 在 ...
- 【.NET Core】 hangfire
与quartz.net对比 Quartz.net在定时任务处理方面优势如下: 支持秒级单位的定时任务处理,但是Hangfire只能支持分钟及以上的定时任务处理 原因在于Hangfire用的是开源的NC ...
- ASP.NET Core使用Hangfire做定时任务
1.新建 ASP.NET Core项目,使用管理NuGet程序包添加Hangfire,然后ASP.NET Core Startup 类中添加如下代码 using Microsoft.AspNetCor ...
最新文章
- 01_字符串处理-----05_相似性度量
- 添加商品php,php – 为首次购买者添加商品到购物车
- windows - mysql
- 使用CUBA进行开发–是Spring的重大转变吗?
- php注册页面模板,选项卡式WordPress登陆注册模板
- C# 设计模式,工厂方法
- 路由到另外一个页面_Nextjs使用解读一(项目搭建与路由系统)
- 【django】三、常用的模板标签和过滤器
- python实战1.1——根据1.0做词云图
- 【前端 · 面试 】HTTP 总结(九)—— HTTP 协商缓存
- python报告水印怎么弄_超简单Python安全批量打水印教程!
- PIM DM技术原理与实验
- vs2017结合qt开发,vs报错找不到库(解决方案)
- PP苹果助手 v2.3.0 官方版
- 运放放大倍数计算公式_运放电路设计【1】
- 特征级融合_自动驾驶系统入门(七)- 多传感器信息融合(MSIF)
- 1.3 eclips下载与安装
- 启发式算法,元启发式算法,超启发式算法
- 架构师必须了解的 5 种最佳软件架构模式
- 针对Arduino IDE 2.0安装后找不到端口的问题(USB转串口驱动)(Win11)
热门文章
- 2022年湖南省自考考试学前教育幼儿文学练习题及答案
- fastadmin btn-ajax,FastAdmin 在线命令生成时出错的分析
- ubuntu 16 xenial EKL安装
- 基于ChatGPT制作的一款英语口语练习应用SpokenAi
- matlab小车运动轨迹增量式PID控制
- Qt sql中出现的错误 Error: unable to open database “D:\Qt“: unable to open database file
- 方法被重写时的调用问题
- 贷款那些事之还款方式等额本息(一)
- 【转载】Windows 7下使用bcdedit删除多余启动项的命令
- 邝子平:vc兼做pe?