public static Uri UseInMemoryScheduler(this IBusFactoryConfigurator configurator, string queueName = "quartz") { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); var scheduler = TaskUtil.Await(() => schedulerFactory.GetScheduler()); Uri inputAddress = null; configurator.ReceiveEndpoint(queueName, e => { var partitioner = configurator.CreatePartitioner(16); e.Consumer(() => new ScheduleMessageConsumer(scheduler), x => x.Message <ScheduleMessage>(m => m.UsePartitioner(partitioner, p => p.Message.CorrelationId))); e.Consumer(() => new CancelScheduledMessageConsumer(scheduler), x => x.Message <CancelScheduledMessage>(m => m.UsePartitioner(partitioner, p => p.Message.TokenId))); configurator.UseMessageScheduler(e.InputAddress); var observer = new SchedulerBusObserver(scheduler, e.InputAddress); configurator.ConnectBusObserver(observer); inputAddress = e.InputAddress; }); return(inputAddress); }
public static void UseHangfireScheduler(this IBusFactoryConfigurator configurator, IHangfireComponentResolver hangfireComponentResolver, string queueName = "hangfire", Action <BackgroundJobServerOptions> configureServer = null) { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } if (hangfireComponentResolver == null) { throw new ArgumentNullException(nameof(hangfireComponentResolver)); } configurator.ReceiveEndpoint(queueName, e => { var partitioner = configurator.CreatePartitioner(Environment.ProcessorCount); e.Consumer(() => new ScheduleMessageConsumer(hangfireComponentResolver), x => { x.Message <ScheduleMessage>(m => m.UsePartitioner(partitioner, p => p.Message.CorrelationId)); x.Message <CancelScheduledMessage>(m => m.UsePartitioner(partitioner, p => p.Message.TokenId)); }); e.Consumer(() => new ScheduleRecurringMessageConsumer(hangfireComponentResolver)); var observer = new SchedulerBusObserver(hangfireComponentResolver, e.InputAddress, configureServer); configurator.ConnectBusObserver(observer); configurator.UseMessageScheduler(e.InputAddress); }); }
public static void ConfigureTurnoutEndpoints <T>(this IReceiveEndpointConfigurator configurator, IBusFactoryConfigurator busFactoryConfigurator, IReceiveEndpointConfigurator turnoutEndpointConfigurator, IReceiveEndpointConfigurator expiredEndpointConfigurator, Action <ITurnoutServiceConfigurator <T> > configure) where T : class { configurator.AddDependency(turnoutEndpointConfigurator); turnoutEndpointConfigurator.AddDependency(expiredEndpointConfigurator); var specification = new TurnoutServiceSpecification <T>(configurator); configure(specification); specification.ManagementAddress = turnoutEndpointConfigurator.InputAddress; busFactoryConfigurator.AddBusFactorySpecification(specification); var partitioner = busFactoryConfigurator.CreatePartitioner(specification.PartitionCount); expiredEndpointConfigurator.Consumer(() => new JobCustodian <T>(specification.JobRegistry), x => { x.Message <SuperviseJob <T> >(m => m.UsePartitioner(partitioner, p => p.Message.JobId)); }); turnoutEndpointConfigurator.Consumer(() => new JobSupervisor <T>(specification.Service, specification.JobRegistry), x => { x.Message <CancelJob>(m => m.UsePartitioner(partitioner, p => p.Message.JobId)); x.Message <SuperviseJob <T> >(m => m.UsePartitioner(partitioner, p => p.Message.JobId)); }); IJobFactory <T> jobFactory = specification.JobFactory; configurator.Consumer(() => new JobProducer <T>(specification.Service, jobFactory)); busFactoryConfigurator.BusObserver(() => new JobServiceBusObserver(specification.Service)); }
public static void UseInMemoryScheduler(this IBusFactoryConfigurator configurator) { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); var scheduler = schedulerFactory.GetScheduler(); configurator.ReceiveEndpoint("quartz", e => { var partitioner = configurator.CreatePartitioner(16); e.Consumer(() => new ScheduleMessageConsumer(scheduler), x => x.Message <ScheduleMessage>(m => m.UsePartitioner(partitioner, p => p.Message.CorrelationId))); e.Consumer(() => new CancelScheduledMessageConsumer(scheduler), x => x.Message <CancelScheduledMessage>(m => m.UsePartitioner(partitioner, p => p.Message.TokenId))); configurator.UseMessageScheduler(e.InputAddress); var specification = new SchedulerBusFactorySpecification(scheduler, e.InputAddress); configurator.AddBusFactorySpecification(specification); }); }
public static void AddScheduling(this IBusFactoryConfigurator configurator, Action <InMemorySchedulerOptions> configure) { if (configurator == null) { throw new ArgumentNullException(nameof(configurator)); } var options = new InMemorySchedulerOptions(); configure?.Invoke(options); if (options.SchedulerFactory == null) { throw new ArgumentNullException(nameof(options.SchedulerFactory)); } Uri inputAddress = null; var observer = new SchedulerBusObserver(options); configurator.ReceiveEndpoint(options.QueueName, e => { var partitioner = configurator.CreatePartitioner(Environment.ProcessorCount); e.Consumer(() => new ScheduleMessageConsumer(observer.Scheduler), x => x.Message <ScheduleMessage>(m => m.UsePartitioner(partitioner, p => p.Message.CorrelationId))); e.Consumer(() => new CancelScheduledMessageConsumer(observer.Scheduler), x => x.Message <CancelScheduledMessage>(m => m.UsePartitioner(partitioner, p => p.Message.TokenId))); configurator.UseMessageScheduler(e.InputAddress); configurator.ConnectBusObserver(observer); }); }
void ConfigureBus(IBusFactoryConfigurator configurator) { _partitioner = configurator.CreatePartitioner(8); }