Exemplo n.º 1
0
        public static void Initialize(bool startWorkers = true, Action <RabbitMqJobsOptions> configureAction = null)
        {
            var options = new RabbitMqJobsOptions
            {
                RabbitMqSettings = new RabbitMqSettings()
            };

            configureAction?.Invoke(options);

            var massiveJobsSettings = CreateJobsSettings(options);

            var publisher = new RabbitMqMessagePublisher(options.RabbitMqSettings, massiveJobsSettings, options.JobLoggerFactory.SafeCreateLogger <RabbitMqMessagePublisher>());
            var consumer  = new RabbitMqMessageConsumer(options.RabbitMqSettings, massiveJobsSettings, options.JobLoggerFactory.SafeCreateLogger <RabbitMqMessageConsumer>());

            var serviceScopeFactory = new DefaultServiceScopeFactory(
                massiveJobsSettings,
                publisher,
                consumer,
                options.JobLoggerFactory,
                options.JobSerializer,
                options.JobTypeProvider
                );

            MassiveJobsMediator.Initialize(serviceScopeFactory);

            if (startWorkers)
            {
                MassiveJobsMediator.DefaultInstance.StartJobWorkers();
            }
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                if (!MassiveJobsMediator.IsInitialized)
                {
                    try
                    {
                        _logger.LogInformation("Initializing MassiveJobs");

                        MassiveJobsMediator.Initialize(_jobServiceFactory);

                        _options.OnInitAction?.Invoke();

                        if (_options.StartWorkers)
                        {
                            MassiveJobsMediator.DefaultInstance.StartJobWorkers();
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, "MassiveJobs initialization failed");
                    }
                }

                try
                {
                    await Task.Delay(10 * 1000, stoppingToken);
                }
                catch (OperationCanceledException)
                {
                }
            }

            if (MassiveJobsMediator.IsInitialized)
            {
                try
                {
                    _logger.LogInformation("De-initializing MassiveJobs");
                    MassiveJobsMediator.Deinitialize();
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, "MassiveJobs de-initialization failed");
                }
            }
        }