Quartz.NET 入门

前言
在 ASP.NET 中常见的排程框架不外乎 Quartz.NET 与 Hangfire 两种,过去自己在开发上比较常用到 Hangfire 搭配其后台管理介面,在使用上可以说是相当方便与容易上手,最近在新专案也有遇到 schedule 的需求,同事大推 Quartz.Net 来担任工作排程器的工作,Quartz.Net 是一套功能齐全的工作排程框架,由 Java 热门的排程框架 Quartz 移植到 .NET 上,open source 且提供弹性的设定让开发者使用,在新版 3.0.7 支援 .NET Core 2.1 版本,今天就来简单介绍 Quartz.NET 的安装与基本应用使用,若有问题或是错误的地方欢迎各位高手给予指导。

安装
首先,先建立一个名称为 QuartzNetConsole 的 Console 专案,接著开启 Nuget Package Mnage 输入 “quartz” 搜寻,安装目前最新版的 Quartz.NET 套件
QuartzNetInstall

或是在 Nuget Package Console 输入指令

Install-Package Quartz 

如果有 Json 序列化需求,也可以一併加入 Quartz.Serialization.Json

使用
在使用前先介绍 Quartz.Net 中的几个重要 API 与 Interface

  • IScheduler : 主要工作排程 API、透过 Start 方法 run 排程。

  • JobBuilderIJobDetail : 透过 JobBuilder.Create 产生 IJobDetailInstance

  • TriggerBuilderITrigger : 透过 TriggerBuilder.Create 产生 ITriggerInstance

IJob : 自定义的排程类别要实作的 Interface

简单整理关係图如下
QuartzNetAPIInterface
.png)]

接著在 Console 专案 Program.cs 中的 Main 加入下列代码

class Program
{
    static void Main(string[] args)
    {
        // trigger async evaluation
        RunProgram().GetAwaiter().GetResult();
    }
 
    private static async Task RunProgram()
    {
        try
        {
            // 建立 scheduler
            StdSchedulerFactory factory = new StdSchedulerFactory();
            IScheduler scheduler = await factory.GetScheduler();
 
            // 建立 Job
            IJobDetail job = JobBuilder.Create<ShowDataTimeJob>()
                .WithIdentity("job1", "group1")
                .Build();
 
            // 建立 Trigger,每秒跑一次
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger1", "group1")
                .StartNow()
                .WithSimpleSchedule(x => x
                    .WithIntervalInSeconds(1)
                    .RepeatForever())
                .Build();
 
            // 加入 ScheduleJob 中
            await scheduler.ScheduleJob(job, trigger);
 
            // 启动
            await scheduler.Start();
 
            // 执行 10 秒
            await Task.Delay(TimeSpan.FromSeconds(10));
 
            // say goodbye
            await scheduler.Shutdown();
        }
        catch (SchedulerException se)
        {
            await Console.Error.WriteLineAsync(se.ToString());
        }
    }
}

其中要执行的 ShowDataTimeJob 类别代码如下

internal class ShowDataTimeJob :IJob
{
		public async Task Execute(IJobExecutionContext context)
    {
        await Console.Out.WriteLineAsync($"现在时间 {DateTime.Now}");
    }
}

程式说明

  • 建立 scheduler : 透过 factory.GetScheduler() 取得 schedule

  • 建立 Job : 使用 JobBuilder.Create 建立 ShowDataTimeJob,并定义其 key 与 group 名称

  • 建立 Trigger : 使用 TriggerBuilder 建立 ITrigger ,定义其 key 与 group 名称,并设置立即执行执行时间为每一秒执行一次,其中 ShowDataTimeJobExecute 就是此执行。执行结果如下:

在这里插入图片描述

感想
上透过简单的说明与操作,就可以快速的建立出 Quartz.NET 工作排程的功能,但其实在现实生活中的需求及实现的代码往往都不会那麽简单,如果有兴趣可以先参考官方网站的开发说明文件,日后如果遇到在分享给各位,Happy Coding 😃。

另外,Quartz.Net 也能搭配其他套件将设定档设定 XML 档中,甚至也能将够搭配一点手做精神,手刻一些代码后将设定档放置在 YAML 档中,方便配置。此外,JOB 的定义及执行的週期也能够透过安装其它套件,将其存放在 SQL Server 或是 Redis 中,得到更弹性的配置。又或者,能够像设定档一下放置在 YAML 档案中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值