Beispiel #1
0
        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);
            });
        }
        public void ConfigureBus <TEndpointConfigurator>(IBusFactoryConfigurator <TEndpointConfigurator> configurator, IBusRegistrationContext context)
            where TEndpointConfigurator : IReceiveEndpointConfigurator
        {
            var options = context.GetRequiredService <QuartzConfiguration>();

            var schedulerAddress = new Uri($"queue:{options.Queue}");

            _logger.LogInformation("Configuring Quartz: {SchedulerAddress}", schedulerAddress);

            var schedulerOptions = new InMemorySchedulerOptions
            {
                SchedulerFactory = new StdSchedulerFactory(options.Configuration),
                QueueName        = options.Queue
            };

            configurator.ConnectBusObserver(new SchedulerBusObserver(schedulerOptions));
        }
Beispiel #3
0
 /// <summary>
 /// Creates the bus observer to initialize the Quartz scheduler.
 /// </summary>
 /// <param name="options">Configuration to initialize with.</param>
 public SchedulerBusObserver(InMemorySchedulerOptions options)
 {
     _options = options;
     _schedulerEndpointAddress = new Uri($"queue:{options.QueueName}");
     _schedulerSource          = TaskUtil.GetTask <IScheduler>();
 }