From 8260b3fd13ac6443d59939b70f259a1b76f28dfb Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 27 Jul 2018 08:58:39 +0300 Subject: [PATCH] Refactored background job options. --- .../AbpBackgroundJobsAbstractionsModule.cs | 4 +- .../BackgroundJobConfiguration.cs | 20 +++++++++ .../BackgroundJobs/BackgroundJobOptions.cs | 45 ++++++++++++++++--- .../Hangfire/HangfireJobExecutionAdapter.cs | 4 +- .../Abp/BackgroundJobs/RabbitMQ/JobQueue.cs | 2 +- .../RabbitMQ/JobQueueManager.cs | 23 ++++------ .../Abp/BackgroundJobs/BackgroundJobWorker.cs | 8 ++-- 7 files changed, 73 insertions(+), 33 deletions(-) create mode 100644 framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobConfiguration.cs diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/AbpBackgroundJobsAbstractionsModule.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/AbpBackgroundJobsAbstractionsModule.cs index 376806efbb..0c38a60766 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/AbpBackgroundJobsAbstractionsModule.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/AbpBackgroundJobsAbstractionsModule.cs @@ -38,9 +38,7 @@ namespace Volo.Abp.BackgroundJobs { foreach (var jobType in jobTypes) { - var jobArgsType = BackgroundJobArgsHelper.GetJobArgsType(jobType); - var jobName = BackgroundJobNameAttribute.GetName(jobArgsType); - options.JobTypes[jobName] = jobType; + options.AddJob(jobType); } }); } diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobConfiguration.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobConfiguration.cs new file mode 100644 index 0000000000..4e91294a0b --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobConfiguration.cs @@ -0,0 +1,20 @@ +using System; + +namespace Volo.Abp.BackgroundJobs +{ + public class BackgroundJobConfiguration + { + public Type ArgsType { get; } + + public Type JobType { get; } + + public string JobName { get; } + + public BackgroundJobConfiguration(Type jobType) + { + JobType = jobType; + ArgsType = BackgroundJobArgsHelper.GetJobArgsType(jobType); + JobName = BackgroundJobNameAttribute.GetName(ArgsType); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs index 40b7ded802..23306d9c9a 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; namespace Volo.Abp.BackgroundJobs { public class BackgroundJobOptions { - public Dictionary JobTypes { get; } + private readonly Dictionary _jobConfigurationsByArgsType; + private readonly Dictionary _jobConfigurationsByName; //TODO: Implement for all providers! (Hangfire does not implement yet) /// @@ -15,19 +17,48 @@ namespace Volo.Abp.BackgroundJobs public BackgroundJobOptions() { - JobTypes = new Dictionary(); + _jobConfigurationsByArgsType = new Dictionary(); + _jobConfigurationsByName = new Dictionary(); } - public Type GetJobType(string jobName) + public BackgroundJobConfiguration GetJob(Type argsType) { - var jobType = JobTypes.GetOrDefault(jobName); + var jobConfiguration = _jobConfigurationsByArgsType.GetOrDefault(argsType); - if (jobType == null) + if (jobConfiguration == null) { - throw new AbpException("Undefined background job type for the job name: " + jobName); + throw new AbpException("Undefined background job type for the job args type: " + argsType.AssemblyQualifiedName); } - return jobType; + return jobConfiguration; + } + + public BackgroundJobConfiguration GetJob(string name) + { + var jobConfiguration = _jobConfigurationsByName.GetOrDefault(name); + + if (jobConfiguration == null) + { + throw new AbpException("Undefined background job type for the job name: " + name); + } + + return jobConfiguration; + } + + public IReadOnlyList GetJobs() + { + return _jobConfigurationsByArgsType.Values.ToImmutableList(); + } + + public void AddJob(Type jobType) + { + AddJob(new BackgroundJobConfiguration(jobType)); + } + + public void AddJob(BackgroundJobConfiguration jobConfiguration) + { + _jobConfigurationsByArgsType[jobConfiguration.ArgsType] = jobConfiguration; + _jobConfigurationsByName[jobConfiguration.JobName] = jobConfiguration; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire/HangfireJobExecutionAdapter.cs b/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire/HangfireJobExecutionAdapter.cs index 8d89cde379..c1858dc2b7 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire/HangfireJobExecutionAdapter.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire/HangfireJobExecutionAdapter.cs @@ -15,9 +15,7 @@ namespace Volo.Abp.BackgroundJobs.Hangfire public void Execute(TArgs args) { - var jobName = BackgroundJobNameAttribute.GetName(); - var jobType = Options.GetJobType(jobName); - + var jobType = Options.GetJob(typeof(TArgs)).JobType; var context = new JobExecutionContext(jobType, args); JobExecuter.Execute(context); } diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs index d34e131187..bc2c8db94a 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs @@ -48,7 +48,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ RabbitMqOptions = options.Value; JobName = BackgroundJobNameAttribute.GetName(); - JobType = BackgroundJobOptions.GetJobType(JobName); + JobType = BackgroundJobOptions.GetJob(typeof(TArgs)).JobType; QueueName = "BackgroundJobs." + JobName; //TODO: Make prefix optional Logger = NullLogger>.Instance; diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs index 02e27ab7a0..91678766f3 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs @@ -32,15 +32,11 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ return; } - foreach (var item in Options.JobTypes) + foreach (var jobConfiguration in Options.GetJobs()) { - var jobName = item.Key; - var jobType = item.Value; - var argsType = BackgroundJobArgsHelper.GetJobArgsType(jobType); - - var jobQueue = (IRunnable)ServiceProvider.GetRequiredService(typeof(IJobQueue<>).MakeGenericType(argsType)); + var jobQueue = (IRunnable)ServiceProvider.GetRequiredService(typeof(IJobQueue<>).MakeGenericType(jobConfiguration.ArgsType)); await jobQueue.StartAsync(cancellationToken); - JobQueues[jobName] = jobQueue; + JobQueues[jobConfiguration.JobName] = jobQueue; } } @@ -56,17 +52,16 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ public IJobQueue Get() { - var jobName = BackgroundJobNameAttribute.GetName(typeof(TArgs)); + var jobConfiguration = Options.GetJob(typeof(TArgs)); - if (!Options.JobTypes.ContainsKey(jobName)) + return (IJobQueue)JobQueues.GetOrAdd(jobConfiguration.JobName, _ => { - throw new AbpException("No job registered"); - } + var jobQueue = (IRunnable) ServiceProvider + .GetRequiredService(typeof(IJobQueue<>) + .MakeGenericType(typeof(TArgs))); - return (IJobQueue)JobQueues.GetOrAdd(jobName, _ => - { - var jobQueue = (IRunnable)ServiceProvider.GetRequiredService(typeof(IJobQueue<>).MakeGenericType(typeof(TArgs))); jobQueue.Start(); + return jobQueue; }); } diff --git a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs index a9f7791634..018a426940 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs +++ b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs @@ -50,11 +50,9 @@ namespace Volo.Abp.BackgroundJobs try { - var jobType = JobOptions.GetJobType(jobInfo.JobName); - var jobArgsType = BackgroundJobArgsHelper.GetJobArgsType(jobType); - var jobArgs = Serializer.Deserialize(jobInfo.JobArgs, jobArgsType); - - var context = new JobExecutionContext(jobType, jobArgs); + var jobConfiguration = JobOptions.GetJob(jobInfo.JobName); + var jobArgs = Serializer.Deserialize(jobInfo.JobArgs, jobConfiguration.ArgsType); + var context = new JobExecutionContext(jobConfiguration.JobType, jobArgs); try {