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. opencv视频教程分享

    opencv视频教程分享-在线与网盘 https://pan.baidu.com/s/1oAcctlS 密码:i5rd 链接:https://pan.baidu.com/s/1kVJ3iSJ  密码: ...

  2. C# 实现定时/循环任务

    用C#实现定时/循环任务,需要使用到Quartz,在项目的NuGet包管理中可以找到并添加.一般还会伴随安装一个Log4Net,主要用它来记录在任务执行过程中遇到的问题.这边主要是讲实现定时/循环任务 ...

  3. 'ipconfig' 不是内部或外部命令,也不是可运行的程序 或批处理文件

    今天在学习的时候需要找本地ip地址,可是在命令行窗口却显示 百度之后发现原来是环境变量没配置的问题(其实之前是ok的,但应该是anconda安装的时候点了那个一键设置环境变量搞得本地的path里的数据 ...

  4. WeChair项目Alpha冲刺(6/10)

    团队项目进行情况 1.昨日进展    Alpha冲刺第六天 昨日进展: 前端:和后端成功交互,页面修改和完善 后端:和前端成功交互,但是数据解密失败,初步编写登录的service层和dao层代码未测试 ...

  5. Javascript的单线程和异步编程

    运行时概念 下面的内容解释了一个理论上的模型.现代 JavaScript 引擎着重实现和优化了描述的几个语义. 可视化描述 栈 函数调用形成了一个栈帧. function foo(b) { var a ...

  6. 2020年学习目标之一——emacs

    这两天在虚机里面安装了centos7(gnome),决定后续自己的学习一直在这个里面进行,对于编辑器我最后选择了emacs,新手一枚,不过正好也算是今年的一项学习目标吧,加油! (完)

  7. Vmware - 安装并启动 Centos 8

    下载 Linux 安装包 https://mirrors.aliyun.com/centos/8.1.1911/isos/x86_64/ 不同版本的 Centos https://mirrors.al ...

  8. java架构-一些设计上的基本常识

    最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助, 把暂时想到的几条,先记在这里. 1.API与SPI分离 框架或组件通常有两类客户,一个是使用者,一个是扩展者. API(Applic ...

  9. c语言学习笔记第三章———数据和C

    B站有视频演示 本章将会讲解c语言的数据定义和使用,您将会了解int.float.double.char的含义,了解命名的规则,对c语言会有更加深刻的认识. 变量命名: 我们先讲上次视频没讲的变量命名 ...

  10. 解决移动端点击穿透问题_h5实现移动端点击事件穿透的多种解决方案

    移动端点透点透现象出现的场景: 当A/B两个层上下z轴重叠,上层的A点击后消失或移开(这一点很重要),并且B元素本身有默认click事件(如a标签)或绑定了click事件.在这种情况下,点击A/B重叠 ...