/// <summary> /// Add job to underlying service collection.jobType shoud be implement `IJob` /// </summary> public static IServiceCollectionQuartzConfigurator AddJob( this IServiceCollectionQuartzConfigurator options, Type jobType, JobKey?jobKey = null, Action <IJobConfigurator>?configure = null) { if (!typeof(IJob).IsAssignableFrom(jobType)) { ExceptionHelper.ThrowArgumentException("jobType must implement the IJob interface", nameof(jobType)); } var c = new JobConfigurator(); if (jobKey != null) { c.WithIdentity(jobKey); } var jobDetail = ConfigureAndBuildJobDetail(jobType, c, configure, hasCustomKey: out _); options.Services.Configure <QuartzOptions>(x => { x.jobDetails.Add(jobDetail); }); return(options); }
public void AndGivenTheJobIsConfigured() { var configurator = new JobConfigurator(typeof(WordCountMapper), typeof(WordCountCombiner), typeof(WordCountReducer), typeof(WordCountDataBatchProcessor)); _job = new Job(configurator); }
private static void Main() { Init(); HostFactory.Run(factory => { factory.UseNLog(); factory.UseAutofacContainer(Container); factory.Service <CdcServiceHost>(service => { service.ConstructUsingAutofacContainer(); service.WhenStarted((sc, hc) => sc.Start(hc)); service.WhenStopped((sc, hc) => { Container.Dispose(); return(sc.Stop(hc)); }); service.ScheduleQuartzJob(cfg => JobConfigurator.GetConfigurationForJob <CdcDataImportJob>(cfg, Settings.Default.CdcRecurrentTimeout)); service.ScheduleQuartzJob(cfg => JobConfigurator.GetConfigurationForJob <CheckNotificationQueueJob>(cfg, Settings.Default.CheckNotificationsQueueRecurrentTimeout)); }); factory.RunAsLocalSystem().StartAutomaticallyDelayed().EnableServiceRecovery(sr => { sr.OnCrashOnly(); sr.RestartService(0); sr.SetResetPeriod(1); }).EnableShutdown(); factory.SetServiceName("qp8.cdc.tarantool"); factory.SetDisplayName("QP8 Tarantool CDC Data Import"); factory.SetDescription("Import data from CDC data tables and push them to notification service queue (using Tarantool formatting)"); factory.SetHelpTextPrefix("Import data from CDC data tables and push them to notification service queue (using Tarantool formatting)"); }); }
public void AndGivenTheJobIsConfigured() { var configurator = new JobConfigurator(typeof(WaveDataMapper), typeof(WaveDataCombiner), typeof(WaveDataReducer), typeof(WaveDataBatchProcessor), 2, 8); _job = new Job(configurator); }
public async Task <List <KeyValuePair <string, int> > > WordCountWithCombiner4MappersPerNode16Chunks() { var configurator = new JobConfigurator(typeof(WordCountMapper), typeof(WordCountCombiner), typeof(WordCountReducer), typeof(WordCountDataBatchProcessor), 4, 16); var job = new Job(configurator); var result = await job.Run <string, List <KeyValuePair <string, int> >, string, string, string, int>(_content); return(result); }
public void AddJobOk() { var services = new ServiceCollection(); var configurator = new JobConfigurator(services); configurator.AddJob(typeof(DummyJob)); Assert.AreEqual(1, services.Count); }
public void AddJobGenericDoubled() { var services = new ServiceCollection(); var configurator = new JobConfigurator(services); configurator.AddJob <DummyJob>(); Assert.ThrowsException <ObjectAlreadyExistsException>(() => configurator.AddJob <DummyJob>()); }
public void AddJobGeneric() { var services = new ServiceCollection(); var configurator = new JobConfigurator(services); configurator.AddJob <DummyJob>(); Assert.AreEqual(1, services.Count); }
public async Task <List <KeyValuePair <string, WaveDataAverage> > > WaveDataWithCombiner4MappersPerNode() { var configurator = new JobConfigurator(typeof(WaveDataMapper), typeof(WaveDataCombiner), typeof(WaveDataReducer), typeof(WaveDataBatchProcessor), 4); var job = new Job(configurator); var result = await job.Run <List <WaveData>, List <KeyValuePair <string, WaveDataAverage> >, string, List <WaveData>, string, List <WaveData> >(_waveDatas); return(result); }
private static IJobDetail ConfigureAndBuildJobDetail <T>( JobConfigurator builder, Action <IJobConfigurator>?configure) where T : IJob { builder.OfType <T>(); configure?.Invoke(builder); var jobDetail = builder.Build(); return(jobDetail); }
private static IJobDetail ConfigureAndBuildJobDetail( Type type, JobConfigurator builder, Action <IJobConfigurator>?configure) { builder.OfType(type); configure?.Invoke(builder); var jobDetail = builder.Build(); return(jobDetail); }
public void AndGivenTheJobIsConfigured() { var configurator = new JobConfigurator(); configurator.UseMapper(typeof(WordCountMapper)) .UseCombiner(typeof(WordCountCombiner)) .UseReducer(typeof(WordCountReducer)) .UseDataBatchProcessor(typeof(WordCountDataBatchProcessor)) .WithNumberOfChunk(4); _job = new Job(configurator); }
private static IJobDetail ConfigureAndBuildJobDetail( Type type, JobConfigurator builder, Action <IJobConfigurator>?configure, out bool hasCustomKey) { builder.OfType(type); configure?.Invoke(builder); hasCustomKey = builder.Key is not null; var jobDetail = builder.Build(); return(jobDetail); }
/// <summary> /// Schedule job with trigger to underlying service collection. This API maybe change! /// </summary> public static IServiceCollectionQuartzConfigurator ScheduleJob <T>( this IServiceCollectionQuartzConfigurator options, Action <ITriggerConfigurator> trigger, Action <IJobConfigurator>?job = null) where T : IJob { if (trigger is null) { throw new ArgumentNullException(nameof(trigger)); } var jobConfigurator = new JobConfigurator(); var jobDetail = ConfigureAndBuildJobDetail(typeof(T), jobConfigurator, job, out var jobHasCustomKey); options.Services.Configure <QuartzOptions>(quartzOptions => { quartzOptions.jobDetails.Add(jobDetail); }); var triggerConfigurator = new TriggerConfigurator(); triggerConfigurator.ForJob(jobDetail); trigger.Invoke(triggerConfigurator); var t = triggerConfigurator.Build(); // The job configurator is optional and omitted in most examples // If no job key was specified, have the job key match the trigger key if (!jobHasCustomKey) { ((JobDetailImpl)jobDetail).Key = new JobKey(t.Key.Name, t.Key.Group); // Keep ITrigger.JobKey in sync with IJobDetail.Key ((IMutableTrigger)t).JobKey = jobDetail.Key; } if (t.JobKey is null || !t.JobKey.Equals(jobDetail.Key)) { throw new InvalidOperationException("Trigger doesn't refer to job being scheduled"); } options.Services.Configure <QuartzOptions>(quartzOptions => { quartzOptions.triggers.Add(t); }); return(options); }
/// <summary> /// Add job to underlying service collection. This API maybe change! /// </summary> public static IServiceCollectionQuartzConfigurator AddJob <T>( this IServiceCollectionQuartzConfigurator options, JobKey?jobKey = null, Action <IJobConfigurator>?configure = null) where T : IJob { var c = new JobConfigurator(); if (jobKey != null) { c.WithIdentity(jobKey); } var jobDetail = ConfigureAndBuildJobDetail <T>(c, configure); options.Services.Configure <QuartzOptions>(x => { x.jobDetails.Add(jobDetail); }); options.Services.TryAddTransient(jobDetail.JobType); return(options); }
/// <summary> /// Schedule job with trigger to underlying service collection. This API maybe change! /// </summary> public static IServiceCollectionQuartzConfigurator ScheduleJob <T>( this IServiceCollectionQuartzConfigurator options, Action <ITriggerConfigurator> trigger, Action <IJobConfigurator>?job = null) where T : IJob { if (trigger is null) { throw new ArgumentNullException(nameof(trigger)); } var jobConfigurator = new JobConfigurator(); var jobDetail = ConfigureAndBuildJobDetail <T>(jobConfigurator, job); options.Services.Configure <QuartzOptions>(quartzOptions => { quartzOptions.jobDetails.Add(jobDetail); }); options.Services.TryAddTransient(jobDetail.JobType); var triggerConfigurator = new TriggerConfigurator(); triggerConfigurator.ForJob(jobDetail); trigger.Invoke(triggerConfigurator); var t = triggerConfigurator.Build(); if (t.JobKey is null || !t.JobKey.Equals(jobDetail.Key)) { throw new InvalidOperationException("Trigger doesn't refer to job being scheduled"); } options.Services.Configure <QuartzOptions>(quartzOptions => { quartzOptions.triggers.Add(t); }); return(options); }
public void AddJobNotJob() { var configurator = new JobConfigurator(new ServiceCollection()); Assert.ThrowsException <ArgumentException>(() => configurator.AddJob(typeof(NotJob))); }