zoukankan      html  css  js  c++  java
  • 任务调度框架Hangfire 简介

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

    在.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(7));
    
    
    //定时任务执行(Recurring jobs)
    RecurringJob.AddOrUpdate(
        () => Console.WriteLine("Recurring!"),
        Cron.Daily);
    
    
    //延续性任务执行(Continuations)
    RecurringJob.AddOrUpdate(
        () => Console.WriteLine("Recurring!"),
        Cron.Daily);
    View Code

    这些任务是配置在服务器上的,如果要动态配置任务则可以通过让服务器提供接口即可。

    缺点

    最后也简单的说下Hangfire的缺点吧,另一个比较热门的任务调度框架是Quartz.net,它和Hangfire相比有如下优点:

    • 支持秒级单位的定时任务处理,但是Hangfire只能支持分钟及以上的定时任务处理
    • 更加复杂的触发器,日历以及任务调度处理
    • 可配置的定时任务

    其中Hangfire最大的缺点可能是第一条,任务执行时间精度不够,不过在大部分应用场景来说,这个不是很大的问题。

    参考文章

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

  • 相关阅读:
    解决:信息中插入avi格式的视频时,提示“unsupported video format”
    java字节数组和16进制之间的转换
    16进制转换字节数组工具类
    如何在ubuntu 12.04 中安装经典的 GNOME桌面
    Ubuntu安装软件提示”需要安装不能信任的软件包”解决办法
    Ubuntu系统下运行Eclipse出现找不到jre的问题的解决方法
    ubuntu添加共享出错
    从scrapy使用经历说开来
    有趣的问题--12 coins problem
    一个奇怪的MySQL错误返回
  • 原文地址:https://www.cnblogs.com/TianFang/p/10222708.html
Copyright © 2011-2022 走看看