1.场景

①因为工作线程都在忙碌,所以导致某些Trigger得不到触发

也就是默认10个工作线程而我有15个Trigger同时触发

这就导致有5个不能被触发,而不幸的是Trigger所关联的Job执行时间特别长

如果某些Trigger超过指定的阈值那么就不会触发

②Scheduler挂掉了。。。某些时刻又恢复了

③如果你设置的时间早于现在,中有一个StartAt

2.阈值是多少

RAMJobStore默认是5s,DBJobStore是60s

为了统一阈值,在初始化的时候,会读取内置的quartz.config文件,统一设置成60s

 private TimeSpan misfireThreshold = TimeSpan.FromSeconds();
quartz.jobStore.misfireThreshold = 

3.Misfire的策略

①错过几次让它立刻执行,后面正常调度

②错过的几次让他合并成一次执行,后面正常调度

③忽略错误的次数,正常调度

4.SimpleScheduler怎么使用Mrsfire策略

one

            IScheduler scheduler=await SchedulerBuilder.Create().Build();

            await scheduler.Start();

            var job = JobBuilder.Create<MyJob>().Build();

            var trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(,,))
.WithSimpleSchedule(s=>
s.WithIntervalInSeconds()
//.WithMisfireHandlingInstructionFireNow()
)
.Build(); await scheduler.ScheduleJob(job,trigger);

repeat count

            IScheduler scheduler=await SchedulerBuilder.Create().Build();

            await scheduler.Start();

            var job = JobBuilder.Create<MyJob>().Build();

            var trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(,,))
.WithSimpleSchedule(s=>
s.WithIntervalInHours()
//.WithMisfireHandlingInstructionFireNow()
.WithRepeatCount()
.WithMisfireHandlingInstructionIgnoreMisfires()
)
.Build(); await scheduler.ScheduleJob(job,trigger);

①WithMisfireHandlingInstructionNextWithExistingCount

比如说StartTime:7:00,每小时执行一次,现在时间是10:40也就是错过了4次 ,本来是11次  7+11=18点结束

也就是下次触发的时间 StartTime:22:00开始 重复执行11次 11+11=22点结束 

也就是说任然会保留11次执行

            IScheduler scheduler=await SchedulerBuilder.Create().Build();

            await scheduler.Start();

            var job = JobBuilder.Create<MyJob>().Build();

            var trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(,,))
.WithSimpleSchedule(s=>
s.WithIntervalInHours()
//.WithMisfireHandlingInstructionFireNow()
.WithRepeatCount()
.WithMisfireHandlingInstructionNextWithExistingCount()
)
.Build(); await scheduler.ScheduleJob(job,trigger);

②WithMisfireHandlingInstructionNextWithRemainingCount

比如说StartTime:7:00,每小时执行一次,现在时间是10:40也就是错过了4次 ,本来是11次  7+11=18点结束

也就是下次触发的时间 StartTime:22:00开始 重复执行11-4次 ,不管错过的4次,正常调度,7+11=18点结束

            IScheduler scheduler=await SchedulerBuilder.Create().Build();

            await scheduler.Start();

            var job = JobBuilder.Create<MyJob>().Build();

            var trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(,,))
.WithSimpleSchedule(s=>
s.WithIntervalInHours()
//.WithMisfireHandlingInstructionFireNow()
.WithRepeatCount()
.WithMisfireHandlingInstructionNextWithRemainingCount()
)
.Build(); await scheduler.ScheduleJob(job,trigger);

③WithMisfireHandlingInstructionNowWithExistingCount

比如说StartTime:7:00,每小时执行一次,现在时间是10:40也就是错过了4次 ,本来是11次  7+11=18点结束

也就是下次触发的时间 StartTime=Now开始 重复执行11次 10.40+11=21.40结束

也就是说任然会保留11次执行,但是会从现在开始

            IScheduler scheduler=await SchedulerBuilder.Create().Build();

            await scheduler.Start();

            var job = JobBuilder.Create<MyJob>().Build();

            var trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(,,))
.WithSimpleSchedule(s=>
s.WithIntervalInHours()
//.WithMisfireHandlingInstructionFireNow()
.WithRepeatCount()
.WithMisfireHandlingInstructionNowWithExistingCount()
)
.Build(); await scheduler.ScheduleJob(job,trigger);

④WithMisfireHandlingInstructionNowWithRemainingCount

比如说StartTime:7:00,每小时执行一次,现在时间是10:40也就是错过了4次 ,本来是11次  7+11=18点结束

也就是下次触发的时间 StartTime=Now开始 重复执行11-4次 ,不管错过的4次,正常调度,7+10:40=17:40点结束

            IScheduler scheduler=await SchedulerBuilder.Create().Build();

            await scheduler.Start();

            var job = JobBuilder.Create<MyJob>().Build();

            var trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(,,))
.WithSimpleSchedule(s=>
s.WithIntervalInHours()
//.WithMisfireHandlingInstructionFireNow()
.WithRepeatCount()
.WithMisfireHandlingInstructionNowWithRemainingCount()
)
.Build(); await scheduler.ScheduleJob(job,trigger);

5.Cronscheduler如何使用Misfire策略

①WithMisfireHandlingInstructionFireAndProceed

错过的合并成一次执行,不修改调度时间

也就说假如StartTime=10:00  现在时间13:16 那么将合并成一次执行 

            var trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(, , ))
.WithCronSchedule("0 0 9-18 ? * MON-FRI",
x=>x.WithMisfireHandlingInstructionFireAndProceed()
)
.Build();

②WithMisfireHandlingInstructionIgnoreMisfires

错过的立即追赶,然后正常调度

            var trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(, , ))
.WithCronSchedule("0 0 9-18 ? * MON-FRI",
x=>x.WithMisfireHandlingInstructionIgnoreMisfires()
)
.Build();

③WithMisfireHandlingInstructionDoNothing

错过的不管,正常执行

          var trigger = TriggerBuilder.Create()
.StartAt(DateBuilder.DateOf(, , ))
.WithCronSchedule("0 0 9-18 ? * MON-FRI",
x=>x.WithMisfireHandlingInstructionDoNothing()
)
.Build();

Quartz.Net系列(十六):Misfire策略在SimpleScheduler和CronScheduler中的使用的更多相关文章

  1. S3C2416裸机开发系列十六_sd卡驱动实现

    S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.传输数据快.可插拔.安全性好等长 ...

  2. “全栈2019”Java第十六章:下划线在数字中的意义

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. 学习ASP.NET Core Razor 编程系列十六——排序

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  4. 为什么不让用join?《死磕MySQL系列 十六》

    大家好,我是咔咔 不期速成,日拱一卒 在平时开发工作中join的使用频率是非常高的,很多SQL优化博文也让把子查询改为join从而提升性能,但部分公司的DBA又不让用,那么使用join到底有什么问题呢 ...

  5. 【Android Studio安装部署系列】三十六、Android studio3.2使用过程中注意事项

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio升级到3.2之后,运行旧项目的时候出现了各种情况,特此记录下. 一.打包选项多了,一般情况下选择APK即 ...

  6. ES系列十六、集群配置和维护管理

    一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...

  7. arcgis api for js入门开发系列十六迁徙流动图

    最近公司有个arcgis api for js的项目,需要用到百度echarts迁徙图效果,而百度那个效果实现是结合百度地图的,怎么才能跟arcgis api结合呢,网上搜索,终于在github找到了 ...

  8. arcgis api 3.x for js 入门开发系列十六迁徙流动图

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  9. Ansible 小手册系列 十六(Playbook Debug)

    debug模块在执行期间打印语句,并且可用于调试变量或表达式,而不必停止playbook. 打印自定义的信息 - debug: msg="System {{ inventory_hostna ...

随机推荐

  1. cb09a_c++_顺序容器的操作2-在顺序容器中添加元素_插入数据

    cb09a_c++_顺序容器的操作2在顺序容器中添加元素vector不能向前插入数据,list可以用insertc.push_back(t);c.push_front(t);c.insert(p,t) ...

  2. cc31a_demo--CppPrimer_静态成员与继承-在派生类中访问基类中的static成员的方法

    //*基类中的static成员,在整个继承层次中只有一个实例 //*在派生类中访问基类中的static成员的方法 //1.基类名::成员名 //2.子类名::成员名 //3.对象.成员名 //4.指针 ...

  3. Java并发编程-深入探讨synchronized实现原理

    synchronized这个关键字对应Java程序猿来说是非常的熟悉,只要遇到要解决线程安全问题的地方都会使用这个关键字.接下来一起来探讨一下synchronized到底时怎么实现线程同步,使用syn ...

  4. CPU明明8个核,网卡为啥拼命折腾一号核?

    中断机制 我是CPU一号车间的阿Q,我又来了! 我们日常的工作就是不断执行代码指令,不过这看似简单的工作背后其实也并不轻松. 咱不能闷着头啥也不管一个劲的只管执行代码,还得和连接在主板上的其他单位打交 ...

  5. Spring和Springboot相关知识点整理

    简介 本文主要整理一些Spring & SpringBoot应用时和相关原理的知识点,对于源码不做没有深入的讲解. 1. 思维导图 右键新窗口打开可以放大. 说明 使用@Configurati ...

  6. 基于 Blazor 开发五子棋⚫⚪小游戏

    今天是农历五月初五,端午节.在此,祝大家端午安康! 端午节是中华民族古老的传统节日之一.端午也称端五,端阳.此外,端午节还有许多别称,如:午日节.重五节.五月节.浴兰节.女儿节.天中节.地腊.诗人节. ...

  7. 计算机网络之DDOS

    1.什么是DDOS DDOS(Distributed Denial of Service),中文意思为“分布式拒绝服务”,就是利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务 ...

  8. 入门大数据---Spark_Transformation和Action算子

    一.Transformation spark 常用的 Transformation 算子如下表: Transformation 算子 Meaning(含义) map(func) 对原 RDD 中每个元 ...

  9. vue中使用element2

    阻止谷歌下记住密码 当我们将input框的类型设置为密码框的时候,就会出现下面这种效果,不仅样式不统一,有的时候,密码框的上面并不是用户名,而是其他的内容,也会被强制显示为用户名: 首先需要解决样式问 ...

  10. iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name

    今天使用docker运行mysql时报错, 执行命令: docker run --restart=always --name mysql5.7 -p 3306:3306 -v /data/mysql/ ...