HTML5技术

开源的.NET定时任务组件Hangfire解析 - 彭泽0902

字号+ 作者:H5之家 来源:H5之家 2017-03-22 13:00 我要评论( )

项目慢慢就要开工了,很多园友都在问这个事情,看来大伙对这事很上心啊,事情需要一步步的来,尽量写出一个我们都满意的项目。以前每次在博客前面都会扯淡一下,不过很多人都抱怨这样做不好,加上我这人扯淡起来就停不住,有时候还会很感性的说出一些话,所

   项目慢慢就要开工了,很多园友都在问这个事情,看来大伙对这事很上心啊,事情需要一步步的来,尽量写出一个我们都满意的项目。以前每次在博客前面都会扯淡一下,不过很多人都抱怨这样做不好,加上我这人扯淡起来就停不住,有时候还会很感性的说出一些话,所以以后写博文尽量少扯淡。(如果博文有不足之处,还望多多指正,我也会及时的修改,如果只是单纯的刷存在感,说一些过激的话,那我就不怎么高兴了)

   项目中很多时候都会使用到定时任务这样一个功能需求,在.NET中对于完成定时任务的技术还是不怎么多的,.NET Framework具有“内置”定时器功能,通过System.Timers.Timer类。在使用Timer类需要面对的问题:计时器没有持久化机制;计时器具有不灵活的计划(仅能设置开始时间和重复间隔,没有基于日期,时间等);计时器不使用线程池(每个定时器一个线程);计时器没有真正的管理方案 - 你必须编写自己的机制,以便能够记住,组织和检索任务的名称等。如果需要在.NET实现定时器的功能,可以尝试使用以下这款开源免费的组件Quartz.Net组件。

  上面介绍了两种方式,在这里就介绍另外一种组件,那就是Hangfire组件。

一.Hangfire组件概述

    在.NET和.NET Core应用程序中执行后台处理的简单方法。无需Windows服务或单独的进程。由持久存储支持,存储方式有sqlserver、redis,mongodb等等。Hangfire支持所有类型的后台任务 - 短时间运行和长时间运行,CPU密集型和I / O密集型,一次性和周期性。

   1.组件特点:

   2.组件功能:

      上面是对Hangfire组件背景的一些简单介绍,下面我们具体来了解一下Hangfire组件的使用方法。

二.Hangfire组件使用方法介绍

      既然想要学习了解一个组件,当然需要知道是怎么样取使用,如果不能使用,学着也没有什么很大的用处,下面介绍一下Hangfire组件的一些常用方法。

    1.ASP.NET MVC设置方式:

public void Configuration(IAppBuilder app) { GlobalConfiguration.Configuration.UseSqlServerStorage(); app.UseHangfireDashboard(); app.UseHangfireServer(); }

   GlobalConfiguration.Configuration属性的扩展方法

   2.控制台设置方式:

GlobalConfiguration.Configuration .UseColouredConsoleLogProvider()
          .UseSqlServerStorage(
) .UseMsmqQueues(, , );

    3.基于队列的任务处理:

var jobId = BackgroundJob.Enqueue( () => Console.WriteLine());

    4.延迟任务执行:

var jobId = BackgroundJob.Schedule( () => Console.WriteLine(), TimeSpan.FromDays(7));

    5.循环任务执行:

RecurringJob.AddOrUpdate( () => Console.WriteLine(), Cron.Daily);

    6.继续在其父作业完成时执行:

BackgroundJob.ContinueWith( jobId, () => Console.WriteLine());

    7.批处理方法:

var batchId = BatchJob.StartNew(x => { x.Enqueue(() => Console.WriteLine()); x.Enqueue(() => Console.WriteLine()); });

    8.当父批次中的所有后台作业完成时,批处理继续:

BatchJob.ContinueWith(batchId, x => { x.Enqueue(() => Console.WriteLine()); });

    9.使用IoC容器:

public class ContainerJobActivator : JobActivator { private IContainer _container ; public ContainerJobActivator (IContainer container ) { _container = container ; }} ActivateJob (Type type ) { return _container 。Resolve (type ); } }

    在启动Hangfire服务器之前将其注册为当前作业启动器。

var container = new Container(); GlobalConfiguration.Configuration.UseActivator(new ContainerJobActivator(container)); ... app.UseHangfireServer();

 

      Hangfire将作业保存到持久存储中,并以可靠的方式处理它们。这意味着你可以中止Hangfire工作线程,卸载应用程序域甚至终止进程,工作将被处理。Hangfire将作业标记为已完成,只有当代码的最后一行执行,并知道作业可能会失败,最后一行。它包含不同的自动重试功能,可以处理代码中的存储错误或错误。

三.Hangfire组件核心对象解析

   上面介绍了Hangfire组件的常用方法,Hangfire组件的功能非常多,这里就做介绍了,有兴趣可以去官网进行查看api。下面介绍一下Hangfire组件的一些核心对象,初探Hangfire组件深层次的问题。

   1.RecurringJob.AddOrUpdate():

AddOrUpdate( Expression<Action> methodCall, string cronExpression, TimeZoneInfo timeZone = null, string queue = EnqueuedState.DefaultQueue) { var job = Job.FromExpression(methodCall); var id = GetRecurringJobId(job); Instance.Value.AddOrUpdate(id, job, cronExpression, timeZone ?? TimeZoneInfo.Utc, queue); }

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • GitHub开源:升讯威ADO.NET增强组件 sheng.ADO.NET.Plus V1.3 - sheng.chao

    GitHub开源:升讯威ADO.NET增强组件 sheng.ADO.NET.Plus V1.3 - shen

    2017-03-22 13:02

  • 开源免费的.NET图像即时处理的组件ImageProcessor - 彭泽0902

    开源免费的.NET图像即时处理的组件ImageProcessor - 彭泽0902

    2017-03-18 11:01

  • 跨平台的.NET邮件协议MailKit组件解析 - 彭泽0902

    跨平台的.NET邮件协议MailKit组件解析 - 彭泽0902

    2017-03-17 13:01

  • 一份关于组建.NET Core开源团队的倡议书 - 彭泽0902

    一份关于组建.NET Core开源团队的倡议书 - 彭泽0902

    2017-03-13 17:02

网友点评