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

这篇具有很好参考价值的文章主要介绍了C# 定时服务之Hangfire使用、与Quartz的对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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服务中使用它。以下是要求:

1.NET Framework 4.5

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

3.Newtonsoft.Json库≥5.0.1

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

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

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

四、Hangfire安装和使用:

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

详情地址: NuGet Gallery | Packages matching Hangfire

1、安装Hangfire所需NuGet包:

Hangfire、Hangfire.Core、Hangfire.PostgreSql 

如下图:

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

 2、注册Hangfire

在startup.cs入口文件中添加

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

 注册

public static class CustomExtension
{

    /// <summary>
    /// 注册Hangfire
    /// </summary>
    /// <param name="services"></param>
    /// <param name="configuration"></param>
    /// <returns></returns>
    public static IServiceCollection AddCustomHangfire(this IServiceCollection services, IConfiguration configuration)
    {
       
        #region Job
        services.AddHostedService<WisdomReportMonthJob>();

        services.AddHostedService<WisdomReportDayJob>();
        #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;
    }
}

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

public class WisdomReportMonthJob : IHostedService
    {
        private readonly IConfiguration _Configuration; 

        /// <summary>
        ///
        /// </summary>
        public WisdomReportMonthJob(IConfiguration configuration)
        {
            _Configuration = configuration;
        }
        
        /// <summary>
        /// 开启
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        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;
        }
        /// <summary>
        /// 执行
        /// </summary>
        public async Task WisdomReportMonthJobExec()
        {
            //TOdo 具体业务逻辑
        }

        /// <summary>
        /// 停止
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task StopAsync(CancellationToken cancellationToken)
        {
            await Task.Run(() =>
            {
                Log.Information("已停止运行!");
            }, cancellationToken);
        }
    }

其中定时周期可以 

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

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

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

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

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

C# 定时服务之Hangfire使用、与Quartz的对比文章来源地址https://www.toymoban.com/news/detail-514486.html

到了这里,关于C# 定时服务之Hangfire使用、与Quartz的对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot+redis+mysql+quartz-使用pipeline+lua技术将缓存数据定时更新到数据库

    代码讲解:7.3点赞功能-定时持久化到数据库-Java程序整合pipeline+lua_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1Lg4y1w7U9 代码: blogLike_schedule/like08 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like08 数据库表:

    2024年02月13日
    浏览(43)
  • springboot+redis+mysql+quartz-通过Java操作jedis使用pipeline获取缓存数据定时更新数据库

    代码讲解:6-点赞功能-定时持久化到数据库-pipeline+lua-优化pipeline_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1yP411C7dr 代码: blogLike_schedule/like06 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like06 数据库表的

    2024年02月16日
    浏览(48)
  • springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库

    springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库 代码讲解:7.1点赞功能-定时持久化到数据库-Java整合lua_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1ZX4y1H7JT/ 代码: blogLike_schedule/like07 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee

    2024年02月13日
    浏览(55)
  • Quartz实战:基于Quartz实现定时任务的动态调度,实现定时任务的增删改查

    Quartz使用文档,使用Quartz实现动态任务,Spring集成Quartz,Quartz集群部署,Quartz源码分析 Quartz使用文档,使用Quartz实现动态任务,Spring集成Quartz,Quartz集群部署,Quartz源码分析 此处省略了SysJob实体类,以及Mapper等对数据库的操作。 本文只是大致实现一个基于Quartz实现定时任务

    2024年02月15日
    浏览(49)
  • 使用C#创建安装Windows服务程序(干货)

    开发语言:C# 开发环境: Visual Studio 2022 微软官方文档:https://learn.microsoft.com/zh-cn/dotnet/framework/windows-services/ 最近在公司要求使用Windows服务作为消息队列的消费者,所以自行研究了一下C#中Windows服务如何创建以及如何使用,以及部署的方式。我是西瓜程序猿,此篇记录一下供

    2024年02月12日
    浏览(52)
  • SpringBoot——Quartz 定时任务

    优质博文:IT-BLOG-CN 【1】添加 Scheduled 相关依赖,它是 Spring 自带的一个 jar 包因此引入 Spring 的依赖: 【2】导入依赖之后,就可以在 Maven Dependencies 中看到相关的依赖,如下: 【3】编写定时任务类:重点是 @Scheduled 注解和 cron 属性; 【4】在启动类中开启定时任务的启动:

    2024年02月05日
    浏览(43)
  • 定时任务组件Quartz

    quartz的核心概念 三步 job:做什么事,比如查询当前时间,定时清理图片 trigger:什么时候做 scheduler:什么时候做什么事 需要引入依赖 SpringBoot 通过注解配置Quartz 再运行SpringBoot的启动类。 

    2024年01月23日
    浏览(37)
  • SpringBoot整合定时任务技术Quartz

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ # 一、SpringBoot整合定时任务技术Quartz 🚀Quartz应用场景 Spring Boot整合Quartz的定时任务技术可以应用于许多不同

    2024年02月09日
    浏览(45)
  • 【微服务】springboot整合quartz使用详解

    目录 一、前言 二、quartz介绍 2.1 quartz概述 2.2 quartz优缺点 2.3 quartz核

    2024年02月05日
    浏览(64)
  • 分布式定时任务调度框架Quartz

    Quartz是一个定时任务调度框架,比如你遇到这样的问题: 比如淘宝的待支付功能,后台会在你生成订单后24小时后,查看订单是否支付,未支付则取消订单 比如vip的每月自动续费功能 … 想定时在某个时间,去做某件事 Quartz是一套轻量级的任务调度框架,只需要定义了 Job(

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包