Hangfire介绍

Hangfire 是一个开源的.NET任务调度框架,目前1.6+版本已支持.NET Core。个人认为它最大特点在于内置提供集成化的控制台,方便后台查看及监控

HangFire允许您以非常简单但可靠的方式启动请求处理管道外部的方法调用。这些方法调用在后台线程中执行,称为后台作业。另外Hangfire包含三大核心组件:客户端、持久化存储、服务端,流程介绍图如下:

 

Hangfire基础

基于队列的任务处理(Fire-and-forget jobs)

基于队列的任务处理是Hangfire中最常用的,客户端使用BackgroundJob类的静态方法Enqueue来调用,传入指定的方法(或是匿名函数),Job Queue等参数.

var jobId = BackgroundJob.Enqueue(

    () => Console.WriteLine("Fire-and-forget!"));

在任务被持久化到数据库之后,Hangfire服务端立即从数据库获取相关任务并装载到相应的Job Queue下,在没有异常的情况下仅处理一次,若发生异常,提供重试机制,异常及重试信息都会被记录到数据库中,通过Hangfire控制面板可以查看到这些信息。

延迟任务执行(Delayed jobs)

延迟(计划)任务跟队列任务相似,客户端调用时需要指定在一定时间间隔后调用:

var jobId = BackgroundJob.Schedule(

    () => Console.WriteLine("Delayed!"),

    TimeSpan.FromDays(7));

定时任务执行(Recurring jobs)

定时(循环)任务代表可以重复性执行多次,支持CRON表达式:

RecurringJob.AddOrUpdate(

    () => Console.WriteLine("Recurring!"),

    Cron.Daily);

延续性任务执行(Continuations)

延续性任务类似于.NET中的Task,可以在第一个任务执行完之后紧接着再次执行另外的任务:

BackgroundJob.ContinueWith(

    jobId,

    () => Console.WriteLine("Continuation!"));

其实还有批量任务处理,批量任务延续性处理(Batch Continuations),但这个需要商业授权及收费。在我看来,官方提供的开源版本已经基本够用。

Hangfire与Quartz.Net的优势

  •  持久化保存任务、队列、统计信息
  • 重试机制
  • 多语言支持
  • 支持任务取消
  • 支持按指定Job Queue处理任务
  • 服务器端工作线程可控,即job执行并发数控制
  • 分布式部署,支持高可用
  • 良好的扩展性,如支持IOC、Hangfire Dashboard授权控制、Asp.net Core、持久化存储等
posted @ 2019-08-26 12:27  吴极限  阅读(703)  评论(0)    收藏  举报