Download presentation
1
Asynchronous Job Processing Using Quartz.Net
Jay Vilalta
2
What Is Quartz.Net Scheduler (think task scheduler)
Queue for asynchronous jobs C# port of Quartz (java) Apache license
3
Why Use Quartz.Net Scale out Redundancy Smart handling of failures
Job chaining (poor man’s workflow) Custom scheduling
4
How Can I Run It Embedded in your application
As a stand alone windows service
5
The Basics Scheduler Jobs Triggers
6
Scheduler Runs jobs Manages the scheduling
7
Jobs Do the work Some built-in Mostly roll you own Implement IJob
8
Built-in Jobs FileScanJob: monitors last modified date
NativeJob: runs executables or batch files NoOpJob: does nothing SendMailJob: sends s
9
Jobs - Example public class MyJob : IJob { public void Execute(JobExecutionContext context) { try { int count= context.MergedJobDataMap.GetIntegerFromString(“count"); for (int i = 0; i < count; i++) { //do something useful } catch (ApplicationException ex) { throw new JobExecutionException("Something happened", ex, false);
10
Triggers Tell the scheduler when jobs should run Some built-in
Simple Trigger Cron Trigger NthIncludedDayTrigger Custom Triggers
11
Simple Trigger Start Time Repeat Count Repeat Interval
12
Cron Trigger Similar to UNIX cron Start Time Cron Expression
“ ? * *” “0 0,15,30,45 * ? * *”
13
Custom Triggers No example this time
Implementing a trigger is not trivial Must implement 11 methods Must be able to determine next fire time
14
Scheduling Associate a job to a trigger Multiple triggers can be set
When the trigger fires, the job runs scheduler.ScheduleJob(jobDetail, trigger);
15
Advanced Features Listeners Special Jobs Remote management Clustering
Plug-ins Unit testing
16
Listeners Job Listeners Trigger Listeners Scheduler Listeners
Job and trigger listeners can be global
17
Job Listener Example public class JobHistoryListener : IJobListener { public void JobExecutionVetoed(…) public void JobToBeExecuted(…) public void JobWasExecuted(…) }
18
Trigger Listener Example
public class MyTriggerListener:ITriggerListener { public string Name public void TriggerComplete(…) public void TriggerFired(…) public void TriggerMisfired(…) public bool VetoJobExecution(…) }
19
Special Jobs Stateful Jobs Interruptible Jobs
20
Stateful Jobs Only one can run at a time
Allow you to save/restore state You must manage state yourself Implement IStatefulJob
21
Interruptible Jobs Mechanism to interrupt long running jobs
You must implement yourself Implement IInterruptableJob
22
Remote Management Scheduler can be managed remotely
Exposed via Remoting Most scheduler functions available
23
JobFactory Instantiates jobs Default factory creates a new instance
Create your own if you use DI or IoC container
24
Job Stores RAMJobStore AdoJobStore MySql Oracle Postgres SQL Lite
SQL Server
25
Clustering Load balancing Job Failover
Caveat: clocks synchronized within a second
26
Plug-ins JobInitializationPlugin LoggingJobHistoryPlugin
LoggingTriggerHistoryPlugin ShutdownHookPlugin
27
Plug-ins Stub public class SamplePlugin : ISchedulerPlugin { public void Initialize(string name, IScheduler sched) public void Shutdown() public void Start() }
28
Unit Testing You can / should unit test your quartz classes
Use a mocking framework Mock the Scheduler (IScheduler) Mock a calendar (ICalendar) Use mocks to create your context
29
Sample Unit Test [Test] public void ExecuteTests() { JobDetail detail = new JobDetail(); IScheduler scheduler = new Mock<IScheduler>().Object; ICalendar calendar = new Mock<ICalendar>().Object; IJob job = new NoOpJob(); detail.Name = "Test"; detail.JobDataMap.Add("SOMETHING", "ELSE"); TriggerFiredBundle bundle = new TriggerFiredBundle(detail, new SimpleTrigger(), calendar, false, null, null, null, null); JobExecutionContext context = new JobExecutionContext(scheduler, bundle, job); JobHistoryListener listener = new JobHistoryListener(); listener.JobToBeExecuted(context); listener.JobWasExecuted(context, null); //methods return void so need to get creative to determine if execution was successful }
30
Resources Project Home: Mailing List: Getting Started:
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.