Browse Source

Merge pull request #22714 from abpframework/GetBackgroundJobName

Add support for custom job names in `AbpBackgroundJobOptions`.
pull/22996/head
Halil İbrahim Kalkan 1 year ago
committed by GitHub
parent
commit
ac282254ff
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 19
      docs/en/framework/infrastructure/background-jobs/index.md
  2. 9
      framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/AbpBackgroundJobOptions.cs
  3. 4
      framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobConfiguration.cs
  4. 5
      framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs

19
docs/en/framework/infrastructure/background-jobs/index.md

@ -134,6 +134,25 @@ namespace MyProject
}
```
##### Custom Job Name
You can configure `GetBackgroundJobName` delegate of the `AbpBackgroundJobOptions` to change the default job name.
```csharp
Configure<AbpBackgroundJobOptions>(options =>
{
options.GetBackgroundJobName = (jobType) =>
{
if (jobTyep == typeof(EmailSendingArgs))
{
return "emails";
}
return BackgroundJobNameAttribute.GetName(jobType);
};
});
```
### Queue a Job Item
Now, you can queue an email sending job using the `IBackgroundJobManager` service:

9
framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/AbpBackgroundJobOptions.cs

@ -14,10 +14,17 @@ public class AbpBackgroundJobOptions
/// </summary>
public bool IsJobExecutionEnabled { get; set; } = true;
/// <summary>
/// The delegate to get the name of a background job.
/// Default: <see cref="BackgroundJobNameAttribute.GetName"/>.
/// </summary>
public Func<Type, string> GetBackgroundJobName { get; set; }
public AbpBackgroundJobOptions()
{
_jobConfigurationsByArgsType = new Dictionary<Type, BackgroundJobConfiguration>();
_jobConfigurationsByName = new Dictionary<string, BackgroundJobConfiguration>();
GetBackgroundJobName = BackgroundJobNameAttribute.GetName;
}
public BackgroundJobConfiguration GetJob<TArgs>()
@ -61,7 +68,7 @@ public class AbpBackgroundJobOptions
public void AddJob(Type jobType)
{
AddJob(new BackgroundJobConfiguration(jobType));
AddJob(new BackgroundJobConfiguration(jobType, GetBackgroundJobName(jobType)));
}
public void AddJob(BackgroundJobConfiguration jobConfiguration)

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

@ -10,10 +10,10 @@ public class BackgroundJobConfiguration
public string JobName { get; }
public BackgroundJobConfiguration(Type jobType)
public BackgroundJobConfiguration(Type jobType, string jobName)
{
JobType = jobType;
ArgsType = BackgroundJobArgsHelper.GetJobArgsType(jobType);
JobName = BackgroundJobNameAttribute.GetName(ArgsType);
JobName = jobName;
}
}

5
framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs

@ -18,6 +18,7 @@ public class DefaultBackgroundJobManager : IBackgroundJobManager, ITransientDepe
protected IBackgroundJobSerializer Serializer { get; }
protected IGuidGenerator GuidGenerator { get; }
protected IBackgroundJobStore Store { get; }
protected IOptions<AbpBackgroundJobOptions> BackgroundJobOptions { get; }
protected IOptions<AbpBackgroundJobWorkerOptions> BackgroundJobWorkerOptions { get; }
public DefaultBackgroundJobManager(
@ -25,18 +26,20 @@ public class DefaultBackgroundJobManager : IBackgroundJobManager, ITransientDepe
IBackgroundJobSerializer serializer,
IBackgroundJobStore store,
IGuidGenerator guidGenerator,
IOptions<AbpBackgroundJobOptions> backgroundJobOptions,
IOptions<AbpBackgroundJobWorkerOptions> backgroundJobWorkerOptions)
{
Clock = clock;
Serializer = serializer;
GuidGenerator = guidGenerator;
BackgroundJobOptions = backgroundJobOptions;
BackgroundJobWorkerOptions = backgroundJobWorkerOptions;
Store = store;
}
public virtual async Task<string> EnqueueAsync<TArgs>(TArgs args, BackgroundJobPriority priority = BackgroundJobPriority.Normal, TimeSpan? delay = null)
{
var jobName = BackgroundJobNameAttribute.GetName<TArgs>();
var jobName = BackgroundJobOptions.Value.GetBackgroundJobName(typeof(TArgs));
var jobId = await EnqueueAsync(jobName, args!, priority, delay);
return jobId.ToString();
}

Loading…
Cancel
Save