• Quartz.NET学习笔记(一) 简介


    Quartz.NET是一款开源的任务调度框架,他是由Java中的任务调度框架Quartz移植而来的。官方网站https://www.quartz-scheduler.net/

    Quartz.Net的特性

    运行环境

    • Quartz.NET可以寄宿在其他的.NET程序中运行
    • Quartz.NET可以作为独立程序运行
    • Quartz.NET可以在集群中使用,支持负载均衡和故障切换

    任务调度

    • 任务和触发器是多对一关系, 同一个任务可以绑定到多个触发器中,但是一个触发器只能绑定一个任务
    • 触发器可以在某天特定时间触发
    • 触发器可以在一周某一天触发(周一-周日)
    • 触发器可以在一个月中某一天触发
    • 触发器可以在一年某一天触发
    • 触发器支持排除日期列表
    • 触发器支持指定次数的重复触发
    • 触发器支持无限次数的重复触发
    • 触发器支持直到某个时间/日期重复触发
    • 触发器支持一定时间间隔的重复触发

    任务执行

    • 所有的任务类都必须实现IJob接口
    • 所有的定义的任务类都可以由NET实例化
    • 当触发器触发,调度器会根据当前任务的状态通知所有JobListener和TriggerListener
    • 当任务完成时,系统会返回一个任务完成码来通知调度器任务成功还是失败,调度器可以根据任务完成码做出不同的反应。

    任务持久化

    • 支持使用NET进行任务持久化
    • 支持使用内存进行任务持久化
    • 自定义持久化(实现IJobStore接口)

    简单例子

    首先我们先用一个简单例子,对Quartz.NET有一个大概的了解。

    创建项目

    打开Visual Studio, 创建一个简单的控制台程序

    添加Quartz.NET库

    我们可以从官网下载最新的Quartz.NET的库,但是使用Nuget来管理.NET库更便捷。

    打开Package Manager Console,输入

    install-package Quartz

    添加第一个任务

    添加一个新类FirstJob.cs, 其代码如下。

     public class FirstJob : IJob
    
        {
    
            public void Execute(IJobExecutionContext context)
    
            {
    
                Console.WriteLine("Hello World.");
    
            }
    
        }



    所有的任务都必须实现IJob接口, IJob接口中只包含一个需要实现的方法Execute, 该方法中加入的代码,即这个任务需要干的事情。

    创建调度器

    在Program.cs的Main方法中加入以下代码

                ISchedulerFactory schedFact = new StdSchedulerFactory();
    
     
    
                IScheduler sched = schedFact.GetScheduler();
    
                sched.Start();



    这里使用的是抽象工厂模式, 使用默认的调度器工厂StdSchedulerFactory来创建一个调度器。所有的调度器都需要手动调用Start()方法来启动。

    创建任务和触发器

    在Main方法中继续添加以下代码

                IJobDetail job = JobBuilder.Create<FirstJob>()
    
                    .WithIdentity("myJob", "group1")
    
                    .Build();
    
     
    
                ITrigger trigger = TriggerBuilder.Create()
    
                  .WithIdentity("myTrigger", "group1")
    
                  .StartNow()
    
                  .Build();



    这里JobBuilder负责根据指定的任务类型产生一个任务项,并绑定任务需要的参数或者为任务进行分组。

    TriggerBuilder负责产生不用类型的触发器,前面特性里面有说明,触发器有很多类型,都是在这里设置的,并且在这里可以对触发器进行分组。这里StartNow()表示触发器加入调度器后,立即执行。

    使用调度器,绑定触发器和任务

    前面我们只是创建了任务和触发器,他们之间现在还没有任何关联。

    下面我们在Main方法中加入最后一行代码

    sched.ScheduleJob(job, trigger);

    调度器将触发器和任务绑定在一起。

    最终实现效果

    启动项目,效果如下,  Hello World正确显示了

  • 相关阅读:
    稳定性「三十六计」- 无状态化
    设置默认的超时和重试是一个基础设施的基本素养
    「前任的50种死法」开发踩坑案例--慢就是错
    稳定性「三十六计」- 配额管控
    编写代码的「八荣八耻」- 以开关上线为荣,以自信编码为耻
    Kubernetes的DaemonSet(下篇)
    使用Elasticsearch的动态索引和索引优化
    Kubernetes的DaemonSet(上篇)
    程序媛的人生观
    Kubernetes的污点和容忍(下篇)
  • 原文地址:https://www.cnblogs.com/lwqlun/p/9095106.html
Copyright © 2020-2023  润新知