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)
{
var jobArgsType = BackgroundJobArgsHelper.GetJobArgsType(jobType);
var jobName = BackgroundJobNameAttribute.GetName(jobArgsType);
options.JobTypes[jobName] = jobType;
options.AddJob(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.Collections.Generic;
using System.Collections.Immutable;
namespace Volo.Abp.BackgroundJobs
{
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)
/// <summary>
@ -15,19 +17,48 @@ namespace Volo.Abp.BackgroundJobs
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)
{
var jobName = BackgroundJobNameAttribute.GetName<TArgs>();
var jobType = Options.GetJobType(jobName);
var jobType = Options.GetJob(typeof(TArgs)).JobType;
var context = new JobExecutionContext(jobType, args);
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;
JobName = BackgroundJobNameAttribute.GetName<TArgs>();
JobType = BackgroundJobOptions.GetJobType(JobName);
JobType = BackgroundJobOptions.GetJob(typeof(TArgs)).JobType;
QueueName = "BackgroundJobs." + JobName; //TODO: Make prefix optional
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;
}
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<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();
return jobQueue;
});
}

8
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
{

Loading…
Cancel
Save