c# - running quartz job in TriggerComplete event -


my program should run maximum (n) job @ time. if there more job needs run store in temp storage , after completing 1 of running job i'll pick trigger base on how trigger fails start , it's priority, , fire job

at initialization phase, create example 5 job 5 corresponding trigger , add scheduler everything's fine until second job running triggercomplete of trigger listener not firing picking job run, please tell me im wrong ??

 public class crawlertriggerlistener : itriggerlistener {    private int maxconcurrentcrawling = 1;    private int currentcount = 0;    private object synclock = new object();    private dictionary firedic = new dictionary();

public string name { { return "listener"; } }

public void triggerfired(trigger trigger, jobexecutioncontext context) { if (firedic.count == 0) { ischeduler sched = context.scheduler; string[] triggernamelist = sched.gettriggernames("triggergroup"); foreach (string triggername in triggernamelist) { missfiredinfo missedinfo = new missfiredinfo(); missedinfo.triggername = triggername; missedinfo.priority = sched.gettrigger(triggername, "triggergroup").priority; firedic.add(triggername, missedinfo); } } } public bool vetojobexecution(trigger trigger, jobexecutioncontext context) { lock (synclock) { if (currentcount < maxconcurrentcrawling) { currentcount++; firedic[trigger.name].failcount = 0; firedic[trigger.name].lastfiretime = datetime.utcnow; return false; } else { firedic[trigger.name].lastfiretime = datetime.utcnow; firedic[trigger.name].failcount++; return true; } } } public void triggermisfired(trigger trigger) { }

public void triggercomplete(trigger trigger, jobexecutioncontext context, schedulerinstruction triggerinstructioncode) { lock (synclock) { currentcount--;

       var validcandidate = new dictionary<string, int>();        foreach (keyvaluepair<string, missfiredinfo> firedicitem in firedic)            if (firedicitem.value.failcount > 0)               validcandidate.add(firedicitem.key, firedicitem.value.failcount * 73 + firedicitem.value.priority);         if (validcandidate.count > 0)        {            var sorted = (from entry in validcandidate orderby entry.value ascending select entry);            string triggername = sorted.first().key;            firedic[triggername].lastfiretime = datetime.utcnow;            firedic[triggername].failcount = 0;            string jobname = context.scheduler.gettrigger(triggername, "triggergroup").jobname;            currentcount++;             context.scheduler.triggerjob(jobname, "jobgroup");         }    } 

} }

okay, again, i'm not sure instantiating triggerlistener, might want verify adding triggerlistener scheduler.

http://quartznet.sourceforge.net/tutorial/lesson_7.html

see scheduler instance has method "adding" (or registering) listeners. if don't that, events never fire.


Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -