文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C# 定时服务之Hangfire使用、与Quartz的对比

2023-09-24 14:24

关注

Querz:Windows任务计划程序位于ASP.NET环境之外。它可以用来运行任何类型的Windows程序。要添加Windows任务,您需要登录到服务器。

Hangfire通常在IIS进程中运行(尽管它也可以在控制台应用程序中运行)。 Hangfire的主要优点是开发人员无需登录IIS服务器即可创建计划任务 - 在供应商托管的IIS环境中,服务器访问不可用时尤其有用。

定时任务调度问题,是一个老生常谈的问题。网上有许多定时任务调度的解决方案,对于我而言很早以前主要是使用Window计划和Window服务来做任务定时执行,然后就开始使用定时任务调度框架Quartz.Net。但是却一直没有上手过Hangfire这个自带后台任务调度面板,可以在后台手动执行任务的神奇的任务调度框架。前段时间终于开始对他下手了,通过在网上查阅了一些资料和查看了Hangfire在Github中的demo,终于在我自己的项目中用上了Hangfire。在该篇文章中主要简单介绍一下什么是Hangfire,Hangfire的基本特征与优点和使用PostgreSql作为存储使用。

一、Hangfire是什么:

  Hangfire是一个开源的.NET任务调度框架,提供了内置集成化的控制台,可以直观明了的查看作业调度情况,并且Hangfire不需要依赖于单独的应用程序执行(如:windows服务,window计划)。并且支持持久性存储。

二、Hangfire使用条件:

Hangfire与特定的.NET应用程序类型无关。您可以在ASP.NET Web应用程序,非ASP.NET Web应用程序,控制台应用程序或Windows服务中使用它。以下是要求:

NET Framework 4.5

永久存储(Hangfire将后台作业和其他与处理有关的信息保留在永久性存储器中,所以需要存储库来存储如:MS SQL Server,Redis,MySQL,PostgreSql等)

Newtonsoft.Json库≥5.0.1

三、Hangfire的基本特征与优点:

通过官网中的一张图片便可知道它是一个多么优秀的任务调度框架,如下图所示:

四、Hangfire安装和使用:

在NuGet上有关于Hangfire的 一系列软件包:

详情地址: NuGet Gallery | Packages matching Hangfire

1、安装Hangfire所需NuGet包:

Hangfire、Hangfire.Core、Hangfire.PostgreSql 

如下图:

 2、注册Hangfire

在startup.cs入口文件中添加

 public void ConfigureServices(IServiceCollection services) {     services.AddCustomHangfire(Configuration); }

 注册

public static class CustomExtension{    ///     /// 注册Hangfire    ///     ///     ///     ///     public static IServiceCollection AddCustomHangfire(this IServiceCollection services, IConfiguration configuration)    {               #region Job        services.AddHostedService();        services.AddHostedService();        #endregion        var vDbType = configuration["CurrentDbType"];        services.AddHangfire(x => x.UsePostgreSqlStorage(configuration[$"DataBase:{vDbType}:JYTDBConnString"], new PostgreSqlStorageOptions        {            //如果设置为true,则创建数据库表。默认是true            PrepareSchemaIfNecessary = Convert.ToBoolean(configuration["Hangfire:PrepareSchemaIfNecessary"]),            QueuePollInterval = TimeSpan.FromSeconds(1)        }));        services.AddHangfireServer();        return services;    }}

定义具体要执行的定时任务

public class WisdomReportMonthJob : IHostedService    {        private readonly IConfiguration _Configuration;         ///         ///        ///         public WisdomReportMonthJob(IConfiguration configuration)        {            _Configuration = configuration;        }                ///         /// 开启        ///         ///         ///         public Task StartAsync(CancellationToken cancellationToken)        {            try            {                Hangfire.RecurringJob.AddOrUpdate("WisdomRunReportMonthJob", () => WisdomReportMonthJobExec(), Cron.Hourly(10),TimeZoneInfo.Local);            }            catch (Exception ex)            {                Log.Error(ex, "接口错误:" + ex.Message);            }            return Task.CompletedTask;        }        ///         /// 执行        ///         public async Task WisdomReportMonthJobExec()        {            //TOdo 具体业务逻辑        }        ///         /// 停止        ///         ///         ///         public async Task StopAsync(CancellationToken cancellationToken)        {            await Task.Run(() =>            {                Log.Information("已停止运行!");            }, cancellationToken);        }    }

其中定时周期可以 

每个小时的哪一分钟开始执行 Cron.Hourly(10);

每天的具体哪个时间点执行 Cron.Daily(0, 9);

当然还有其他的一些执行的周期格式,按照官方文档的使用方式使用即可。

程序运行后会自动生成对应的Hangfire数据库,这里需要注意的是,执行周期运行后是持久性、周期性的,如果你变更了其中的周期,就需要重新将生成的Hangfire数据库清空,然后重新运行,保证定时任务能在你新修改的周期内运行。

如图,即为自动生成的数据库:

来源地址:https://blog.csdn.net/tony900205/article/details/129444456

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯