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

在.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 查看程序主界面了,默认还自带中文

  任务调度框架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(7));


//定时任务执行(Recurring jobs)
RecurringJob.AddOrUpdate(
    () => Console.WriteLine("Recurring!"),
    Cron.Daily);


//延续性任务执行(Continuations)
RecurringJob.AddOrUpdate(
    () => Console.WriteLine("Recurring!"),
    Cron.Daily);
View Code

相关文章: