任务调度框架Hangfire 简介
任务调度是我们项目中常见的功能,虽然任务调度的功能实现本身并不难,但一个好用的轮子还是可以给我们的开发的效率提升不少的。
在.net环境中,较为有名的任务调度框架是HangFire与Quartz.NET,本文这里主要介绍Hangfire,相比Quartz.NET来说,它提供了更加友好的页面,使用起来更加方便。Hangfire的优点网上有不少文章介绍的,这里简单的列举一下:
- 支持各种常见的任务类型
- 持久化保存任务、队列、统计信息
- 重试机制
- 多语言支持
- 支持任务取消
- 支持按指定Job Queue处理任务
- 服务器端工作线程可控,即job执行并发数控制
- 分布式部署,支持高可用
- 良好的扩展性,如支持IOC、Hangfire Dashboard授权控制、Asp.net Core、持久化存储等
简单使用:
这里就简单的演示.net core下基本的用法。首先建立一个.net core 的web项目,如果没有别的需求使用空项目模板也可以。
1. 添加程序包:
Install-Package Hangfire
2. 配置数据库:
Hangfire默认支持sqlserver和redis,也可以通过第三方扩展支持sqlite等数据库。这里我选择的是常用的sqlserver。
使用sqlserver作为存储引擎时,首先需要在sqlserver上创建一个数据库,可以不用建表,Hangfire会自动建表。
3. 注册服务:
首先在Startup.cs的ConfigureServices 方法中注册服务:
services.AddHangfire(r => r.UseSqlServerStorage("Data Source=192.168.18.130;Initial Catalog=HangfireDemo;User ID=sa;Password=abc123@ss"));
然后在Configure 方法中加入HangfireServer及HangfireDashboard:
app.UseHangfireServer();
app.UseHangfireDashboard();
此时启动程序,就可以通过 http://localhost:5000/hangfire 查看程序主界面了,默认还自带中文

4. 配置任务
Hangfire提供了一系列接口配置任务:
//基于队列的任务处理(Fire-and-forget jobs)
var jobId = BackgroundJob.Enqueue(
() => Console.WriteLine("Fire-and-forget!")); //延迟任务执行(Delayed jobs)
var jobId = BackgroundJob.Schedule(
() => Console.WriteLine("Delayed!"),
TimeSpan.FromDays()); //定时任务执行(Recurring jobs)
RecurringJob.AddOrUpdate(
() => Console.WriteLine("Recurring!"),
Cron.Daily); //延续性任务执行(Continuations)
RecurringJob.AddOrUpdate(
() => Console.WriteLine("Recurring!"),
Cron.Daily);
这些任务是配置在服务器上的,如果要动态配置任务则可以通过让服务器提供接口即可。
缺点
最后也简单的说下Hangfire的缺点吧,另一个比较热门的任务调度框架是Quartz.net,它和Hangfire相比有如下优点:
- 支持秒级单位的定时任务处理,但是Hangfire只能支持分钟及以上的定时任务处理
- 更加复杂的触发器,日历以及任务调度处理
- 可配置的定时任务
其中Hangfire最大的缺点可能是第一条,任务执行时间精度不够,不过在大部分应用场景来说,这个不是很大的问题。
参考文章
本文这里只是简单的入门,如果想要更多的了解可以参考下如下文章
- https://www.cnblogs.com/ecin/p/hangfire-best-practice.html
- http://docs.hangfire.io/en/latest/
- https://www.jianshu.com/p/3657496e5b0c
任务调度框架Hangfire 简介的更多相关文章
- 任务调度框架FluentScheduler简介
之前我在文章中介绍过.net中的任务调度框架Hangfire,HangFire虽然本身输入比较简单好用的,但是,如果我们的程序本身提供的服务不是任务调度,而任务调度只是里面并不重要的小功能的时候,用H ...
- 开源的.NET任务调度框架-HangFire
什么是Hangfire Hangfire 是一个开源的.NET任务调度框架,目前1.6+版本已支持.NET Core.内置提供集成化的控制台,方便后台查看及监控: 另外,Hangfire包含三大核心组 ...
- .NET Core下开源任务调度框架Hangfire的Api任务拓展(支持秒级任务)
HangFire的拓展和使用 看了很多博客,小白第一次写博客. 最近由于之前的任务调度框架总出现问题,因此想寻找一个替代品,之前使用的是Quartz.Net,这个框架方便之处就是支持cron表达式适合 ...
- .NET Core下开源任务调度框架Hangfire
今天无意中发现了一个很好用的任务调度框架.Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在 .net core的环境中,由Core自带的DI管理着生命周期. 相较于qu ...
- Hangfire任务调度框架使用
1.HangFire简介 HangFire是一个免费简单实用的分布式后台定时调度服务,在现在.net开发中,人气算是很高的. HangFire提供了内置集成化的控制台,可以直观明了的查看作业调度情况, ...
- 【niubi-job——一个分布式的任务调度框架】----niubi-job这下更牛逼了!
niubi-job迎来第一次重大优化 niubi-job是一款专门针对定时任务所设计的分布式任务调度框架,它可以进行动态发布任务,并且有超高的可用性保证. 有多少人半夜被叫起来查BUG,结果差到最后发 ...
- 【niubi-job——一个分布式的任务调度框架】----安装教程
niubi-job是什么 niubi-job是LZ耗时三个星期,费尽心血打造的一个具备高可靠性以及水平扩展能力的分布式任务调度框架,采用quartz作为底层的任务调度管理器,zookeeper做集群的 ...
- Quarzt.NET 任务调度框架
Quartz.NET是一个开源的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性 ...
- Quartz.Net任务调度框架
Quartz.Net是一个开源的任务调度框架,非常强大,能够通过简单的配置帮助我们定时具体的操作. 相对于我们用的线程里面while(true)然后sleep来执行某个操作,应该算的上是高端,大气,上 ...
随机推荐
- 滚动视差插件skrollr.js
东西虽好,但也不能懒到自己一点都不去做总结,那么下方将会写出从网上找到,比较好的网址(应该是根据官网翻译的). 自己先做一个总结:这个插件兼容上做到了降级处理,虽然低端浏览器没有那么顺畅的效果,但是勉 ...
- [R语言]关联规则1---不考虑items之间的时序关系
本文介绍的是关联规则,分为两部分:第一部分是---不考虑用户购买的items之间严格的时序关系,每个用户有一个“购物篮”,查找其中的关联规则.第二部分--- 考虑items之间的严格的时序关系来分析用 ...
- NET调用Com组件事例
http://blog.csdn.net/shizhiyingnj/article/details/1507948 在程序设计中,往往通过键盘的某个按键来完成相关操作! 下面就来说明如何实现: 1.引 ...
- (原创)关于viewpager嵌套listview居中显示的问题
今天折腾了半天自定义控件的问题,如下图所示,我们UI设计了一种可以左右滑动的列表,而列表中又包含了listview.而且要居中显示listview 我一看UI,心想简单,不就是根据datas的数目进行 ...
- opencv 彩色图像分割(inrange)
灰度图像大多通过算子寻找边缘和区域生长融合来分割图像. 彩色图像增加了色彩信息,可以通过不同的色彩值来分割图像,常用彩色空间HSV/HSI, RGB, LAB等都可以用于分割! 笔者主要介绍inran ...
- jdk678910新特性地址
jdk678910新特性地址 https://blog.csdn.net/f641385712/article/details/81289401 每篇一句:每个人受到的尊重从来都不是应得的,而是赢得的 ...
- 详解使用 Tarjan 求 LCA 问题(图解)
LCA问题有多种求法,例如倍增,Tarjan. 本篇博文讲解如何使用Tarjan求LCA. 如果你还不知道什么是LCA,没关系,本文会详细解释. 在本文中,因为我懒为方便理解,使用二叉树进行示范. L ...
- AxureRP8实战手册
基础操作篇 本篇包含56种常见的基础操作,初学者应在掌握本篇内容后再进行实战案例篇的学习,以免产生学习障碍.同时,建议具备一定基础的读者学习本篇中相对生疏的内容,并加以掌握. 第1章 使用元件 本文目 ...
- IE下css bug集合-翻译自haslayout.net
概述IE浏览器以不支持大量的css 属性出名,同时也因其支持的css属性中存在大量bug. 本页列举了IE下的一些问题,实例样本和一些我们已知的解决方法. 尽管我已经尽力按照它们本来的性质对它们进行分 ...
- 【PAT】1091 Acute Stroke(30 分)
1091 Acute Stroke(30 分) One important factor to identify acute stroke (急性脑卒中) is the volume of the s ...