public AppTenantsInitializer( AppTenantsContext context, IConfiguration configuration, IHostingEnvironment environment, IApplicationLifetime applicationLifetime, IJobFilterProvider jobFilters, MultitenantContainer multiTenantContainer, IBackgroundJobFactory backgroundJobFactory, IBackgroundJobPerformer backgroundJobPerformer, IBackgroundJobStateChanger backgroundJobStateChanger, IBackgroundProcess[] additionalProcesses, ITenantConfiguration[] tenantConfigurations) { _context = context; _configuration = configuration; _environment = environment; _applicationLifetime = applicationLifetime; _jobFilters = jobFilters; _multiTenantContainer = multiTenantContainer; _backgroundJobFactory = backgroundJobFactory; _backgroundJobPerformer = backgroundJobPerformer; _backgroundJobStateChanger = backgroundJobStateChanger; _additionalProcesses = additionalProcesses; _tenantConfigurations = tenantConfigurations; }
public static (BackgroundJobServer server, IRecurringJobManager recurringJobManager, IBackgroundJobClient backgroundJobClient) StartHangfireServer( string serverName, string connectionString, IApplicationLifetime applicationLifetime, IJobFilterProvider jobFilters, JobActivator jobActivator, IBackgroundJobFactory backgroundJobFactory, IBackgroundJobPerformer backgroundJobPerformer, IBackgroundJobStateChanger backgroundJobStateChanger, IBackgroundProcess[] additionalProcesses ) { var options = new BackgroundJobServerOptions { ServerName = serverName, Queues = new string[] { serverName, "default" } }; return(StartHangfireServer( options, connectionString, applicationLifetime, jobFilters, jobActivator, backgroundJobFactory, backgroundJobPerformer, backgroundJobStateChanger, additionalProcesses )); }
internal Worker( [NotNull] IEnumerable <string> queues, [NotNull] IBackgroundJobPerformer performer, [NotNull] IBackgroundJobStateChanger stateChanger, TimeSpan jobInitializationTimeout, int maxStateChangeAttempts) { if (queues == null) { throw new ArgumentNullException(nameof(queues)); } if (performer == null) { throw new ArgumentNullException(nameof(performer)); } if (stateChanger == null) { throw new ArgumentNullException(nameof(stateChanger)); } _queues = queues.ToArray(); _performer = performer; _stateChanger = stateChanger; _jobInitializationWaitTimeout = jobInitializationTimeout; _maxStateChangeAttempts = maxStateChangeAttempts; _profiler = new SlowLogProfiler(_logger); }
public Worker( [NotNull] IEnumerable <string> queues, [NotNull] IBackgroundJobPerformer performer, [NotNull] IBackgroundJobStateChanger stateChanger, [NotNull] JobActivator activator) { if (queues == null) { throw new ArgumentNullException(nameof(queues)); } if (performer == null) { throw new ArgumentNullException(nameof(performer)); } if (stateChanger == null) { throw new ArgumentNullException(nameof(stateChanger)); } if (activator == null) { throw new ArgumentNullException(nameof(activator)); } _queues = queues.ToArray(); _performer = performer; _stateChanger = stateChanger; _activator = activator; _workerId = Guid.NewGuid().ToString(); _profiler = new SlowLogProfiler(_logger); }
public Worker( [NotNull] IEnumerable <string> queues, [NotNull] IBackgroundJobPerformer performer, [NotNull] IBackgroundJobStateChanger stateChanger) : this(queues, performer, stateChanger, JobActivator.Current) { }
public static (BackgroundJobServer server, IRecurringJobManager recurringJobManager, IBackgroundJobClient backgroundJobClient) StartHangfireServer( string tenantId, string serverName, string connectionString, IApplicationLifetime applicationLifetime, IJobFilterProvider jobFilters, MultitenantContainer mtc, IBackgroundJobFactory backgroundJobFactory, IBackgroundJobPerformer backgroundJobPerformer, IBackgroundJobStateChanger backgroundJobStateChanger, IBackgroundProcess[] additionalProcesses ) { var tenantJobActivator = new AspNetCoreMultiTenantJobActivator(mtc, tenantId); return(HangfireHelper.StartHangfireServer( serverName, connectionString, applicationLifetime, jobFilters, tenantJobActivator, backgroundJobFactory, backgroundJobPerformer, backgroundJobStateChanger, additionalProcesses)); }
public Worker( [NotNull] IEnumerable <string> queues, [NotNull] IBackgroundJobPerformer performer, [NotNull] IBackgroundJobStateChanger stateChanger) : this(queues, performer, stateChanger, jobInitializationTimeout : TimeSpan.FromMinutes(1), maxStateChangeAttempts : 10) { }
internal BackgroundJobPerformer( [NotNull] IJobFilterProvider filterProvider, [NotNull] IBackgroundJobPerformer innerPerformer) { if (filterProvider == null) throw new ArgumentNullException(nameof(filterProvider)); if (innerPerformer == null) throw new ArgumentNullException(nameof(innerPerformer)); _filterProvider = filterProvider; _innerPerformer = innerPerformer; }
public WorkerProcess(string[] queues, IBackgroundJobPerformer performer, DataStorage storage, string serverId, TimeSpan workerFetchIdleSleep) { this._workerId = Guid.NewGuid().ToString(); this._serverId = serverId ?? throw new ArgumentNullException(nameof(serverId)); this._queues = queues ?? throw new ArgumentNullException(nameof(queues)); this._performer = performer ?? throw new ArgumentNullException(nameof(performer)); this._storage = storage ?? throw new ArgumentNullException(nameof(storage)); this._eventManager = new EventManager(this._storage.GetMonitoringApi()); this._workerFetchIdleSleep = workerFetchIdleSleep; RegisterWorker(); }
public BackgroundJobServer( [NotNull] BackgroundJobServerOptions options, [NotNull] JobStorage storage, [NotNull] IEnumerable <IBackgroundProcess> additionalProcesses, [CanBeNull] IJobFilterProvider filterProvider, [CanBeNull] JobActivator activator, [CanBeNull] IBackgroundJobFactory factory, [CanBeNull] IBackgroundJobPerformer performer, [CanBeNull] IBackgroundJobStateChanger stateChanger) { if (storage == null) { throw new ArgumentNullException(nameof(storage)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } if (additionalProcesses == null) { throw new ArgumentNullException(nameof(additionalProcesses)); } _options = options; var processes = new List <IBackgroundProcessDispatcherBuilder>(); processes.AddRange(GetRequiredProcesses(filterProvider, activator, factory, performer, stateChanger)); processes.AddRange(additionalProcesses.Select(x => x.UseBackgroundPool(1))); var properties = new Dictionary <string, object> { { "Queues", options.Queues }, { "WorkerCount", options.WorkerCount } }; _logger.Info($"Starting Hangfire Server using job storage: '{storage}'"); storage.WriteOptionsToLog(_logger); _logger.Info("Using the following options for Hangfire Server:\r\n" + $" Worker count: {options.WorkerCount}\r\n" + $" Listening queues: {String.Join(", ", options.Queues.Select(x => "'" + x + "'"))}\r\n" + $" Shutdown timeout: {options.ShutdownTimeout}\r\n" + $" Schedule polling interval: {options.SchedulePollingInterval}"); _processingServer = new BackgroundProcessingServer( storage, processes, properties, GetProcessingServerOptions()); }
public Worker( [NotNull] IEnumerable<string> queues, [NotNull] IBackgroundJobPerformer performer, [NotNull] IBackgroundJobStateChanger stateChanger) { if (queues == null) throw new ArgumentNullException("queues"); if (performer == null) throw new ArgumentNullException("performer"); if (stateChanger == null) throw new ArgumentNullException("stateChanger"); _queues = queues.ToArray(); _performer = performer; _stateChanger = stateChanger; _workerId = Guid.NewGuid().ToString(); }
internal BackgroundJobPerformer( [NotNull] IJobFilterProvider filterProvider, [NotNull] IBackgroundJobPerformer innerPerformer) { if (filterProvider == null) { throw new ArgumentNullException(nameof(filterProvider)); } if (innerPerformer == null) { throw new ArgumentNullException(nameof(innerPerformer)); } _filterProvider = filterProvider; _innerPerformer = innerPerformer; }
public BackgroundJobServerHostedService( [NotNull] JobStorage storage, [NotNull] BackgroundJobServerOptions options, [NotNull] IEnumerable <IBackgroundProcess> additionalProcesses, [CanBeNull] IBackgroundJobFactory factory, [CanBeNull] IBackgroundJobPerformer performer, [CanBeNull] IBackgroundJobStateChanger stateChanger) { _options = options ?? throw new ArgumentNullException(nameof(options)); _storage = storage ?? throw new ArgumentNullException(nameof(storage)); _additionalProcesses = additionalProcesses; _factory = factory; _performer = performer; _stateChanger = stateChanger; }
public static (BackgroundJobServer server, IRecurringJobManager recurringJobManager, IBackgroundJobClient backgroundJobClient) StartHangfireServer( BackgroundJobServerOptions options, string connectionString, IApplicationLifetime applicationLifetime, IJobFilterProvider jobFilters, JobActivator jobActivator, IBackgroundJobFactory backgroundJobFactory, IBackgroundJobPerformer backgroundJobPerformer, IBackgroundJobStateChanger backgroundJobStateChanger, IBackgroundProcess[] additionalProcesses ) { JobStorage storage; if (string.IsNullOrWhiteSpace(connectionString)) { storage = new MemoryStorage(); } else if (ConnectionStringHelper.IsSQLite(connectionString)) { storage = new SQLiteStorage(connectionString); } else { storage = new SqlServerStorage(connectionString); } var server = new BackgroundJobServer(options, storage, additionalProcesses, options.FilterProvider ?? jobFilters, options.Activator ?? jobActivator, backgroundJobFactory, backgroundJobPerformer, backgroundJobStateChanger); applicationLifetime.ApplicationStopping.Register(() => server.SendStop()); applicationLifetime.ApplicationStopped.Register(() => server.Dispose()); var recurringJobManager = new RecurringJobManager(storage, backgroundJobFactory); var backgroundJobClient = new BackgroundJobClient(storage, backgroundJobFactory, backgroundJobStateChanger); return(server, recurringJobManager, backgroundJobClient); }
private IEnumerable <IBackgroundProcessDispatcherBuilder> GetRequiredProcesses( [CanBeNull] IJobFilterProvider filterProvider, [CanBeNull] JobActivator activator, [CanBeNull] IBackgroundJobFactory factory, [CanBeNull] IBackgroundJobPerformer performer, [CanBeNull] IBackgroundJobStateChanger stateChanger) { var processes = new List <IBackgroundProcessDispatcherBuilder>(); var timeZoneResolver = _options.TimeZoneResolver ?? new DefaultTimeZoneResolver(); if (factory == null && performer == null && stateChanger == null) { filterProvider = filterProvider ?? _options.FilterProvider ?? JobFilterProviders.Providers; activator = activator ?? _options.Activator ?? JobActivator.Current; factory = new BackgroundJobFactory(filterProvider); performer = new BackgroundJobPerformer(filterProvider, activator, _options.TaskScheduler); stateChanger = new BackgroundJobStateChanger(filterProvider); } else { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } if (performer == null) { throw new ArgumentNullException(nameof(performer)); } if (stateChanger == null) { throw new ArgumentNullException(nameof(stateChanger)); } } processes.Add(new Worker(_options.Queues, performer, stateChanger).UseBackgroundPool(_options.WorkerCount)); processes.Add(new DelayedJobScheduler(_options.SchedulePollingInterval, stateChanger).UseBackgroundPool(1)); processes.Add(new RecurringJobScheduler(factory, _options.SchedulePollingInterval, timeZoneResolver).UseBackgroundPool(1)); return(processes); }
internal static bool GetInternalServices( IServiceProvider provider, out IBackgroundJobFactory factory, out IBackgroundJobStateChanger stateChanger, out IBackgroundJobPerformer performer) { factory = provider.GetService <IBackgroundJobFactory>(); performer = provider.GetService <IBackgroundJobPerformer>(); stateChanger = provider.GetService <IBackgroundJobStateChanger>(); if (factory != null && performer != null && stateChanger != null) { return(true); } factory = null; performer = null; stateChanger = null; return(false); }
public HangfireServer( BackgroundJobServerOptions options, JobStorage jobStorage, IEnumerable <IBackgroundProcess> backgroundProcesses, IBackgroundJobFactory jobFactory, IBackgroundJobPerformer jobPerformer, IBackgroundJobStateChanger jobStateChanger, ILogger <HangfireServer> logger, IJobFilterProvider jobFilterProvider = default, JobActivator activator = default ) { _options = options; _jobStorage = jobStorage; _backgroundProcesses = backgroundProcesses; _jobFactory = jobFactory; _jobPerformer = jobPerformer; _jobStateChanger = jobStateChanger; _jobFilterProvider = options.FilterProvider ?? jobFilterProvider; _activator = options.Activator ?? activator; _logger = logger; }
private IEnumerable <IBackgroundProcess> GetRequiredProcesses( [NotNull] IJobFilterProvider filterProvider, [NotNull] JobActivator activator, [CanBeNull] IBackgroundJobFactory factory, [CanBeNull] IBackgroundJobPerformer performer, [CanBeNull] IBackgroundJobStateChanger stateChanger) { var processes = new List <IBackgroundProcess>(); factory = factory ?? new BackgroundJobFactory(filterProvider); performer = performer ?? new BackgroundJobPerformer(filterProvider, activator); stateChanger = stateChanger ?? new BackgroundJobStateChanger(filterProvider); for (var i = 0; i < _options.WorkerCount; i++) { processes.Add(new Worker(_options.Queues, performer, stateChanger)); } processes.Add(new DelayedJobScheduler(_options.SchedulePollingInterval, stateChanger)); processes.Add(new RecurringJobScheduler(factory)); return(processes); }
public Worker( [NotNull] IEnumerable <string> queues, [NotNull] IBackgroundJobPerformer performer, [NotNull] IBackgroundJobStateChanger stateChanger) { if (queues == null) { throw new ArgumentNullException("queues"); } if (performer == null) { throw new ArgumentNullException("performer"); } if (stateChanger == null) { throw new ArgumentNullException("stateChanger"); } _queues = queues.ToArray(); _performer = performer; _stateChanger = stateChanger; _workerId = Guid.NewGuid().ToString(); }
public ApplicationInsightsBackgroundJobPerformer([NotNull] IBackgroundJobPerformer inner, TelemetryClient telemetryClient) { _inner = inner ?? throw new ArgumentNullException(nameof(inner)); _telemetryClient = telemetryClient; }
public CustomBackgroundJobPerformer([NotNull] IBackgroundJobPerformer inner) { _inner = inner ?? throw new ArgumentNullException(nameof(inner)); }