后台工作者HangFire与ABP框架Abp.Hangfire及扩展

本文介绍了HangFire,一个.NET任务调度框架,用于后台作业处理。HangFire提供内置控制台进行监控,支持短时和长时任务,以及一次性与周期性任务。文章还探讨了HangFire与Quartz.NET的区别,并详细阐述了如何在ABP框架中集成和配置HangFire,包括后台作业管理、异常处理和扩展。通过实操演练,展示了如何在项目中配置和使用HangFire。
摘要由CSDN通过智能技术生成

HangFire与Quartz.NET相比主要是HangFire的内置提供集成化的控制台,方便后台查看及监控,对于大家来说,比较方便。

HangFire是什么

Hangfire是一个开源框架(.NET任务调度框架),可以帮助您创建,处理和管理您的后台作业,处理你不希望放入请求处理管道的操作:

  • 通知/通讯;
  • xml,csv,json批量导入;
  • 创建档案;
  • 发射web hooks;
  • 删除用户;
  • 建立不同的图表;
  • 图像/视频处理;
  • 清除临时文件;
  • 反复出现的自动报告;
  • 数据库维护

Hangfire支持所有类型的后台任务 - 短时间运行和长时间运行, CPU intensiveI/O intensive,一次性的和经常性的。你不需要重新发明轮子 ,可以直接使用。
Hangfire包含三大核心组件:客户端、持久化存储、服务端。看看官方的这张图:

image.png

Hangfire基础

  • 基于队列的任务处理(Fire-and-forget)
    延迟作业也只执行一次,但不会立即执行 - 只能在指定的时间间隔后执行。
var jobId = BackgroundJob.Schedule(
    () => Console.WriteLine("Delayed!"),
    TimeSpan.FromDays(7));
  • 定时执行(Recurring)
    按照指定的CRON计划, 重复执行的作业会被多次触发。
RecurringJob.AddOrUpdate(
    () => Console.WriteLine("Recurring!"),
    Cron.Daily);
  • 延续性执行(Continuations)
    延续性任务类似于.NET中的Task,可以在第一个任务执行完之后紧接着再次执行另外的任务:
BackgroundJob.ContinueWith(
    jobId,
    () => Console.WriteLine("Continuation!"));
  • 延时执行任务(Delayed)
    延迟作业也只执行一次,但不会立即执行 - 只能在指定的时间间隔后执行。
var jobId = BackgroundJob.Schedule(
    () => Console.WriteLine("Delayed!"),
    TimeSpan.FromDays(7));
  • 批处理(Batches)
    批处理是一组自动创建的后台作业。
var batchId = Batch.StartNew(x =>
{
    x.Enqueue(() => Console.WriteLine("Job 1"));
    x.Enqueue(() => Console.WriteLine("Job 2"));
});
  • 延时批处理(Batch Continuations)
    批处理在父类完成后触发后台作业。
Batch.ContinueWith(batchId, x =>
{
    x.Enqueue(() => Console.WriteLine("Last Job"));
});
  • 后台进程(Background Process)
    当你需要在应用程序的整个生命周期中连续运行后台进程时使用它们。
public class CleanTempDirectoryProcess : IBackgroundProcess
{
    public void Execute(BackgroundProcessContext context)
    {
        Directory.CleanUp(Directory.GetTempDirectory());
        context.Wait(TimeSpan.FromHours(1));
    }
}

后台作业是应用程序中非常重要的部分,Hangfire确保至少执行一次任务。要在应用程序重新启动之间保留后台作业信息,所有信息都将保存在您最喜欢的持久性存储中。
        Hangfire将您的任务保存到持久化库汇总,并且以可靠的方式处理它们。这意味着,你可以中断Hangfire Worder的线程,重新加载应用程序域,或者终止程序,即使这样您的任务仍会被处理。只有在你代码的最后一行执行完成,Hangfire才会标记这个任务完成。并且知道任务可能在最后一行代码执行之前失败。它包含多种 自动-重试机制,它可以自动处理在存储或代码执行过程中发生的错误。
       这对于通用托管环境(如IIS Server)非常重要。它们可以包含不的
优化,超时和错误处理代码 (可能导致进程终止)来防止不好的事情发生。如果您没有使用可靠的处理和自动机制,您的工作可能会丢失。您的最终用户可能无限期等待某些任务,如电子邮件,报告,通知等。

实操演练

光说不练假把式,下面我们新建一个w

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值