2015-03-31 11 views
5

Voglio concatenare i 3 lavori, ma AddJobChainLink() ottiene solo 2 jobKeys come parametro.Come concatenare più di 2 lavori usando JobChainingJobListener Quartz.net?

scheduler = container.GetInstance<IScheduler>(); 
      scheduler.JobFactory = container.GetInstance<IJobFactory>(); JobKey jobkey1 = new JobKey("job1", "group1"); 
      JobKey jobkey2 = new JobKey("job2", "group2"); 
      JobKey jobkey3 = new JobKey("job3", "group3"); 

      var job1 = JobBuilder.Create<Type1>().WithIdentity("job1", "group1").Build(); 
      var job2 = JobBuilder.Create<Type2>().WithIdentity("job2", "group2").Build(); 
      var job3 = JobBuilder.Create<Type3>().WithIdentity("job3", "group3").Build(); 

      ITrigger trigger1 = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartNow().Build(); 

      JobChainingJobListener chain = new JobChainingJobListener("testChain"); 
      chain.AddJobChainLink(jobkey1, jobkey2); 
      scheduler.ScheduleJob(job1, trigger1); 
      scheduler.AddJob(job2, true); 
      scheduler.AddJob(job3, true); 

      scheduler.ListenerManager.AddJobListener(chain, GroupMatcher<JobKey>.AnyGroup()); 

      scheduler.Start(); 
+0

Avete provato a concatenare 'jobkey1' ->' jobkey2' e 'jobkey2' ->' jobkey3'? –

risposta

6

Prova questo:

JobChainingJobListener chain = new JobChainingJobListener("testChain"); 
chain.AddJobChainLink(jobkey1, jobkey2); 
chain.AddJobChainLink(jobkey2, jobkey3); 

JobChainingJobListener consente di creare una catena di esecuzione per i lavori in un ordine specifico che desiderate. Hai solo bisogno di concatenare ogni lavoro con un altro in ordine specifico.

+0

Penso che questo eseguirà il lavoro numero 2 due volte. cosa ne pensi? – Beginner

+0

@Beginner no, non lo farà. –

+1

Sembrerebbe che i lavori secondari debbano essere impostati come durevoli, altrimenti non verranno mai più attivati ​​dopo il trigger iniziale. –