Quartz.net misfire实践
1.问题描述
在使用Quartz.net定时运行作业时,存在一种情况:作业错过了某次执行,当作业恢复的时候应该怎么处理?如:job1在3:50的时候应该执行的,但此刻job1处于暂停状态,而到3:55的时候,job1 resume,那么错过的3:50该怎么处理?
对此,Quartz.net使用misfire机制,misfire可以翻译为"错过了触发"。
2.misfire机制
这里以CronTrigger为例,提供了两种可选的值,
DoNothing:不触发立即执行。等待下次Cron触发频率到达时刻开始按照Cron频率依次执行。即如果错过了某次执行,直接忽略。
FireOnceNow:以当前时间为触发频率立刻触发一次执行,然后按照Cron频率依次执行。

而原始的Quartz的还提供了更多的选项:
http://blog.csdn.net/sailorhdx/article/details/7656021
3.如何使用?
3.1 配置文件中
- <!--清除日志文件-->
- <job>
- <name>RemoveLogFileEveryDay</name>
- <group>InnerBusiness</group>
- <description>每天清除两周以前的日志文件</description>
- <job-type>NS.RemoveLogFileEveryDay, NS</job-type>
- <durable>false</durable>
- <recover>true</recover>
- </job>
- <trigger>
- <cron>
- <name>RemoveLogFileEveryDayTrigger</name>
- <group>RemoveLogFileEveryDayTrigger</group>
- <description>每天23:00点执行一次</description>
- <job-name>RemoveLogFileEveryDay</job-name>
- <job-group>InnerBusiness</job-group>
- <misfire-instruction>DoNothing</misfire-instruction>
- <cron-expression>0 0 23 * * ?</cron-expression>
- </cron>
- </trigger>
如上:配置了DoNothing。
3.2 代码中
- ICronTrigger myCronTrigger = scheduler.GetTrigger(triggerKey) as ICronTrigger;
- myCronTrigger.GetTriggerBuilder().WithCronSchedule(cronExpresion, (zw) => { zw.WithMisfireHandlingInstructionDoNothing(); }).Build();
仍然配置了DoNothing
4.艰辛的过程:查找配置方法—— <misfire-instruction>DoNothing</misfire-instruction>
一开始,我就想搜一下,如何配置misfire-instruction的配置,但是怎么都找不到,网上有一堆关于quartz_jobs.xml的配置的例子,可是都没有misfire的配置,因为misfire模式使用的FireOnceNow。
于是去官网的API搜索配置,还是没有找到
然后看到了github,就下载了代码

找到这个文件XMLSchedulingDataProcessor.cs,继续找到QuartzXmlConfiguration20,
XmlSerializer xs = new
XmlSerializer(typeof (QuartzXmlConfiguration20));
终于知道是misfire-instruction,而且必须配置在cron-expression的前面,比较严格

继续找到枚举值,直接配置字符串而已~
Quartz.net misfire实践的更多相关文章
- Quartz的misfire特性
Quartz的misfire特性 只有一个线程.多个job 第一个job产生misfire(executeTime>Interval) 且是repeatForever 那么只会运行第一个job, ...
- Quartz的misfire理解
misfire用于Trigger触发时,线程池中没有可用的线程或者调度器关闭了,此时这个Trigger变为misfire.当下次调度器启动或者有可以线程时,会检查处于misfire状态的Trigger ...
- Quartz的misfire处理机制分析
Quartz是一个特性丰富的开源的任务调度开发库,它可以很方便的集成到你的应用程序中.在Quartz中,当一个持久的触发器因为调度器被关闭或者线程池中没有可用的线程而错过了激活时间时,就会发生激活失败 ...
- Quartz.Net—MisFire
什么是misfire misfire就是哑火,就是trigger没有得到正常的触发. 1.所有的threadpool都在工作,而且工作时间很长,导致trigger没有threadpool去执行. 2. ...
- 集群式Quartz定时任务框架实践
在日常开发汇总,经常会遇到需要定时任务的场景,简单的,可以使用Spring的定时任务调度框架,也可以使用Quartz.无论使用哪种,都需要解决一个问题,那就是集群问题.一般情况下,定时任务能且仅能运行 ...
- Quartz任务调度:MisFire策略和源码分析
Quartz是为大家熟知的任务调度框架,先看看官网的介绍: ---------------------------------------------------------------------- ...
- Quartz小记(一):Elastic-Job - 分布式定时任务框架
Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.去掉了和dd-job中的监控和ddframe接入规范部分.该项目基于成熟的开源产品Quartz和Zooke ...
- Quartz教程五:SimpleTrigger
原文链接 | 译文链接 | 翻译:nkcoder 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正:有兴趣 ...
- Quartz.NET | 佳佳的博客
原文:Quartz.NET | 佳佳的博客 Quartz.NET 是一个定时计划任务的框架,支持 .NET Core. 本文示例代码大部分来自于官方教程:Quartz.NET - Quartz.NET ...
随机推荐
- 敲点JavaScript代码
1. DOM DEMO-表格的行排序 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- iATKOS v7硬盘安装教程(硬盘助手+变色龙安装版)
这是作者:Tong 写的一篇安装教程 首先感谢:wowpc制作的变色龙安装版.iATKOS作者以及硬盘安装助手作者 前言:现在时代在进步,系统同样也在进步,在以前要在PC上整个Mac是很痛苦的事情,就 ...
- magic-encoding
(文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 今天页面跳转都出问题了,各种方法都试过了, log里说语法错误,问了pp,他说是汉字的原因...果 ...
- Dynamic Morphing Square(动态变形矩阵)
题目描述: 解题思路: 先对输入的N进行判断,是否不小于3,如果小于3,需要继续输入一个新的数,知道输入的N比3大. 第一个打印的矩阵,*号为最外面一圈,其余全为-. 第二个打印的矩阵,*号向内缩减了 ...
- Linux 浅谈Linux 操作系统的安全设置
如今linux系统安全变的越来越重要了,这里我想把我平时比较常使用的一些linux下的基本的安全措施写出来和大家探讨一下,让我们的linux系统变得可靠. 1.BIOS的安全设置 这是最基本的了,也是 ...
- HDOJ 1878 欧拉回路 nyoj 42一笔画问题
#include<cstdio> #include<cstring> ]; int find(int x) { if(visited[x]!=x) return find(vi ...
- 《linux备份与恢复之二》3.19 dump(文件系统备份)
<Linux指令从初学到精通>第3章文件管理,本章介绍了许多常用命令,如cp.ln.chmod.chown.diff.tar.mv等,因为这些都与文件管理相关,在日常的使用中经常用到,因此 ...
- linux 学习一:安装jdk和tomcat
使用secureCRT 一.首先安装centos的rzsz. 1.yum自动安装:(yum安装rzsz) yum install lrzsz 2.手动安装方法如下:(包有问题,还是采用第一种方式) 2 ...
- iOS NSURLConnection 和 dispatch_async 错误的使用方法,导致回调方法无法调用
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{ NSMutableURLRequest ...
- 在Android上使用fontAwesome
再也不用做那些讨厌的小图标了! 从网上找了些资料,总结下在android上使用fontAwesome的方法. 1.到官网上下载资源包,找到其中的字体文件fontawesome-webfont.ttf, ...