Browse Source

Refactored background job options.

pull/395/head
Halil ibrahim Kalkan 8 years ago
parent
commit
8260b3fd13
  1. 4
      framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/AbpBackgroundJobsAbstractionsModule.cs
  2. 20
      framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobConfiguration.cs
  3. 45
      framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs
  4. 4
      framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire/HangfireJobExecutionAdapter.cs
  5. 2
      framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs
  6. 23
      framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs
  7. 8
      framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs

4
framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/AbpBackgroundJobsAbstractionsModule.cs

@ -38,9 +38,7 @@ namespace Volo.Abp.BackgroundJobs
{ {
foreach (var jobType in jobTypes) foreach (var jobType in jobTypes)
{ {
var jobArgsType = BackgroundJobArgsHelper.GetJobArgsType(jobType); options.AddJob(jobType);
var jobName = BackgroundJobNameAttribute.GetName(jobArgsType);
options.JobTypes[jobName] = jobType;
} }
}); });
} }

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

45
framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobOptions.cs

@ -1,11 +1,13 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Immutable;
namespace Volo.Abp.BackgroundJobs namespace Volo.Abp.BackgroundJobs
{ {
public class BackgroundJobOptions public class BackgroundJobOptions
{ {
public Dictionary<string, Type> JobTypes { get; } private readonly Dictionary<Type, BackgroundJobConfiguration> _jobConfigurationsByArgsType;
private readonly Dictionary<string, BackgroundJobConfiguration> _jobConfigurationsByName;
//TODO: Implement for all providers! (Hangfire does not implement yet) //TODO: Implement for all providers! (Hangfire does not implement yet)
/// <summary> /// <summary>
@ -15,19 +17,48 @@ namespace Volo.Abp.BackgroundJobs
public BackgroundJobOptions() public BackgroundJobOptions()
{ {
JobTypes = new Dictionary<string, Type>(); _jobConfigurationsByArgsType = new Dictionary<Type, BackgroundJobConfiguration>();
_jobConfigurationsByName = new Dictionary<string, BackgroundJobConfiguration>();
} }
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<BackgroundJobConfiguration> 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;
} }
} }
} }

4
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) public void Execute(TArgs args)
{ {
var jobName = BackgroundJobNameAttribute.GetName<TArgs>(); var jobType = Options.GetJob(typeof(TArgs)).JobType;
var jobType = Options.GetJobType(jobName);
var context = new JobExecutionContext(jobType, args); var context = new JobExecutionContext(jobType, args);
JobExecuter.Execute(context); JobExecuter.Execute(context);
} }

2
framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs

@ -48,7 +48,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ
RabbitMqOptions = options.Value; RabbitMqOptions = options.Value;
JobName = BackgroundJobNameAttribute.GetName<TArgs>(); JobName = BackgroundJobNameAttribute.GetName<TArgs>();
JobType = BackgroundJobOptions.GetJobType(JobName); JobType = BackgroundJobOptions.GetJob(typeof(TArgs)).JobType;
QueueName = "BackgroundJobs." + JobName; //TODO: Make prefix optional QueueName = "BackgroundJobs." + JobName; //TODO: Make prefix optional
Logger = NullLogger<JobQueue<TArgs>>.Instance; Logger = NullLogger<JobQueue<TArgs>>.Instance;

23
framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs

@ -32,15 +32,11 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ
return; return;
} }
foreach (var item in Options.JobTypes) foreach (var jobConfiguration in Options.GetJobs())
{ {
var jobName = item.Key; var jobQueue = (IRunnable)ServiceProvider.GetRequiredService(typeof(IJobQueue<>).MakeGenericType(jobConfiguration.ArgsType));
var jobType = item.Value;
var argsType = BackgroundJobArgsHelper.GetJobArgsType(jobType);
var jobQueue = (IRunnable)ServiceProvider.GetRequiredService(typeof(IJobQueue<>).MakeGenericType(argsType));
await jobQueue.StartAsync(cancellationToken); await jobQueue.StartAsync(cancellationToken);
JobQueues[jobName] = jobQueue; JobQueues[jobConfiguration.JobName] = jobQueue;
} }
} }
@ -56,17 +52,16 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ
public IJobQueue<TArgs> Get<TArgs>() public IJobQueue<TArgs> Get<TArgs>()
{ {
var jobName = BackgroundJobNameAttribute.GetName(typeof(TArgs)); var jobConfiguration = Options.GetJob(typeof(TArgs));
if (!Options.JobTypes.ContainsKey(jobName)) return (IJobQueue<TArgs>)JobQueues.GetOrAdd(jobConfiguration.JobName, _ =>
{ {
throw new AbpException("No job registered"); var jobQueue = (IRunnable) ServiceProvider
} .GetRequiredService(typeof(IJobQueue<>)
.MakeGenericType(typeof(TArgs)));
return (IJobQueue<TArgs>)JobQueues.GetOrAdd(jobName, _ =>
{
var jobQueue = (IRunnable)ServiceProvider.GetRequiredService(typeof(IJobQueue<>).MakeGenericType(typeof(TArgs)));
jobQueue.Start(); jobQueue.Start();
return jobQueue; return jobQueue;
}); });
} }

8
framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs

@ -50,11 +50,9 @@ namespace Volo.Abp.BackgroundJobs
try try
{ {
var jobType = JobOptions.GetJobType(jobInfo.JobName); var jobConfiguration = JobOptions.GetJob(jobInfo.JobName);
var jobArgsType = BackgroundJobArgsHelper.GetJobArgsType(jobType); var jobArgs = Serializer.Deserialize(jobInfo.JobArgs, jobConfiguration.ArgsType);
var jobArgs = Serializer.Deserialize(jobInfo.JobArgs, jobArgsType); var context = new JobExecutionContext(jobConfiguration.JobType, jobArgs);
var context = new JobExecutionContext(jobType, jobArgs);
try try
{ {

Loading…
Cancel
Save