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 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 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); }); }