任务调度是我们项目中常见的功能,虽然任务调度的功能实现本身并不难,但一个好用的轮子还是可以给我们的开发的效率提升不少的。

在.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最大的缺点可能是第一条,任务执行时间精度不够,不过在大部分应用场景来说,这个不是很大的问题。

参考文章

本文这里只是简单的入门,如果想要更多的了解可以参考下如下文章

任务调度框架Hangfire 简介的更多相关文章

  1. 任务调度框架FluentScheduler简介

    之前我在文章中介绍过.net中的任务调度框架Hangfire,HangFire虽然本身输入比较简单好用的,但是,如果我们的程序本身提供的服务不是任务调度,而任务调度只是里面并不重要的小功能的时候,用H ...

  2. 开源的.NET任务调度框架-HangFire

    什么是Hangfire Hangfire 是一个开源的.NET任务调度框架,目前1.6+版本已支持.NET Core.内置提供集成化的控制台,方便后台查看及监控: 另外,Hangfire包含三大核心组 ...

  3. .NET Core下开源任务调度框架Hangfire的Api任务拓展(支持秒级任务)

    HangFire的拓展和使用 看了很多博客,小白第一次写博客. 最近由于之前的任务调度框架总出现问题,因此想寻找一个替代品,之前使用的是Quartz.Net,这个框架方便之处就是支持cron表达式适合 ...

  4. .NET Core下开源任务调度框架Hangfire

    今天无意中发现了一个很好用的任务调度框架.Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在 .net core的环境中,由Core自带的DI管理着生命周期. 相较于qu ...

  5. Hangfire任务调度框架使用

    1.HangFire简介 HangFire是一个免费简单实用的分布式后台定时调度服务,在现在.net开发中,人气算是很高的. HangFire提供了内置集成化的控制台,可以直观明了的查看作业调度情况, ...

  6. 【niubi-job——一个分布式的任务调度框架】----niubi-job这下更牛逼了!

    niubi-job迎来第一次重大优化 niubi-job是一款专门针对定时任务所设计的分布式任务调度框架,它可以进行动态发布任务,并且有超高的可用性保证. 有多少人半夜被叫起来查BUG,结果差到最后发 ...

  7. 【niubi-job——一个分布式的任务调度框架】----安装教程

    niubi-job是什么 niubi-job是LZ耗时三个星期,费尽心血打造的一个具备高可靠性以及水平扩展能力的分布式任务调度框架,采用quartz作为底层的任务调度管理器,zookeeper做集群的 ...

  8. Quarzt.NET 任务调度框架

      Quartz.NET是一个开源的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性 ...

  9. Quartz.Net任务调度框架

    Quartz.Net是一个开源的任务调度框架,非常强大,能够通过简单的配置帮助我们定时具体的操作. 相对于我们用的线程里面while(true)然后sleep来执行某个操作,应该算的上是高端,大气,上 ...

随机推荐

  1. 【转】教你何时开启水果机上的HDR拍照

    原址:http://news.mydrivers.com/1/175/175922.htm 苹果在iOS 4.1操作系统中为iPhone 4增加了一项有趣的新功能:HDR拍照.虽然目前市场上支持HDR ...

  2. MYSQL导入数据出现The MySQL server is running with the --secure-file-priv

    MYSQL导入数据出现The MySQL server is running with the --secure-file-priv option so it cannot execute this ...

  3. JS判断客户浏览器是否是IE8浏览器、jQuery判断浏览器内核

    今天在使用encharts的时候由于要兼容IE8,所以最终决定在非IE8浏览器使用encharts,在IE8使用amcharts.于是需要使用JS判断使用的浏览器版本: function IEVers ...

  4. MQTT--入门【转】

    转自:https://blog.csdn.net/qq_28877125/article/details/78325003 一.简述  MQTT(Message Queuing Telemetry T ...

  5. casper Dom的操作

    phantom.casperTest = true; phantom.outputEncoding="utf-8"; var casper = require('casper'). ...

  6. C++ 螺旋矩阵算法

    清理磁盘空间的时候翻出了多年前写过的螺旋矩阵,代码效率和水平较低,纪念一下,保存到博客园! // ConsoleApplication3.cpp : 定义控制台应用程序的入口点. // #includ ...

  7. apache+php windows下配置

    2014年1月9日 13:58:54 现在PHP大部分是vc9编译的,其扩展在windows下大部分也都是用vc9编译的(memcache,xdebuge...),,所以要想Apache+PHP+PH ...

  8. 解决依赖的moduleBuildConfig.DEBUG总是未false的问题

    Android 开发中一般会通过 BuildConfig.DEBUG 判断是否是 Debug 模式,从而做一些在 Debug 模式才开启的特殊操作,比如打印日志.这样好处是不用在发布前去主动修改,因为 ...

  9. delete/truncate/drop table的区别以及锁在这里的角色

    数据库删除语句 Drop/Delete/Truncate比较 Delete :删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行). 删除某一行:Delete from 数据表名 ...

  10. ​学会用各种姿势备份MySQL数据库

    学会用各种姿势备份MySQL数据库 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复 ...