Browse Source

Use marker interfaces for dynamic worker capabilities

pull/25397/head
SALİH ÖZKARA 5 months ago
parent
commit
8054b26a31
  1. 8
      framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireDynamicBackgroundWorkerManager.cs
  2. 8
      framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzDynamicBackgroundWorkerManager.cs
  3. 7
      framework/src/Volo.Abp.BackgroundWorkers.TickerQ/Volo/Abp/BackgroundWorkers/TickerQ/TickerQDynamicBackgroundWorkerManager.cs
  4. 11
      framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/DefaultDynamicBackgroundWorkerManager.cs
  5. 8
      framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/DynamicBackgroundWorkerManagerCapabilities.cs
  6. 5
      framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/IDynamicBackgroundWorkerManager.cs
  7. 8
      framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsCronScheduling.cs
  8. 8
      framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsRuntimeRegistration.cs
  9. 6
      framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundWorkers/DynamicBackgroundWorkerManager_Tests.cs

8
framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireDynamicBackgroundWorkerManager.cs

@ -13,13 +13,15 @@ using Volo.Abp.Hangfire;
namespace Volo.Abp.BackgroundWorkers.Hangfire;
[Dependency(ReplaceServices = true)]
public class HangfireDynamicBackgroundWorkerManager : IDynamicBackgroundWorkerManager, ISingletonDependency
public class HangfireDynamicBackgroundWorkerManager :
IDynamicBackgroundWorkerManager,
ISupportsRuntimeRegistration,
ISupportsCronScheduling,
ISingletonDependency
{
protected IServiceProvider ServiceProvider { get; }
protected IDynamicBackgroundWorkerHandlerRegistry HandlerRegistry { get; }
public ILogger<HangfireDynamicBackgroundWorkerManager> Logger { get; set; }
public virtual DynamicBackgroundWorkerManagerCapabilities Capabilities { get; } =
new DynamicBackgroundWorkerManagerCapabilities();
public HangfireDynamicBackgroundWorkerManager(
IServiceProvider serviceProvider,

8
framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzDynamicBackgroundWorkerManager.cs

@ -10,15 +10,17 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.BackgroundWorkers.Quartz;
[Dependency(ReplaceServices = true)]
public class QuartzDynamicBackgroundWorkerManager : IDynamicBackgroundWorkerManager, ISingletonDependency
public class QuartzDynamicBackgroundWorkerManager :
IDynamicBackgroundWorkerManager,
ISupportsRuntimeRegistration,
ISupportsCronScheduling,
ISingletonDependency
{
public const string DynamicWorkerNameKey = "AbpDynamicWorkerName";
protected IScheduler Scheduler { get; }
protected IDynamicBackgroundWorkerHandlerRegistry HandlerRegistry { get; }
public ILogger<QuartzDynamicBackgroundWorkerManager> Logger { get; set; }
public virtual DynamicBackgroundWorkerManagerCapabilities Capabilities { get; } =
new DynamicBackgroundWorkerManagerCapabilities();
public QuartzDynamicBackgroundWorkerManager(
IScheduler scheduler,

7
framework/src/Volo.Abp.BackgroundWorkers.TickerQ/Volo/Abp/BackgroundWorkers/TickerQ/TickerQDynamicBackgroundWorkerManager.cs

@ -7,13 +7,6 @@ namespace Volo.Abp.BackgroundWorkers.TickerQ;
[Dependency(ReplaceServices = true)]
public class TickerQDynamicBackgroundWorkerManager : IDynamicBackgroundWorkerManager, ISingletonDependency
{
public virtual DynamicBackgroundWorkerManagerCapabilities Capabilities { get; } =
new DynamicBackgroundWorkerManagerCapabilities
{
SupportsDynamicRegistration = false,
SupportsCronExpression = false
};
public virtual Task AddAsync(
string workerName,
DynamicBackgroundWorkerSchedule schedule,

11
framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/DefaultDynamicBackgroundWorkerManager.cs

@ -10,16 +10,13 @@ using Volo.Abp.Threading;
namespace Volo.Abp.BackgroundWorkers;
public class DefaultDynamicBackgroundWorkerManager : IDynamicBackgroundWorkerManager, ISingletonDependency
public class DefaultDynamicBackgroundWorkerManager :
IDynamicBackgroundWorkerManager,
ISupportsRuntimeRegistration,
ISingletonDependency
{
protected IServiceProvider ServiceProvider { get; }
public ILogger<DefaultDynamicBackgroundWorkerManager> Logger { get; set; }
public virtual DynamicBackgroundWorkerManagerCapabilities Capabilities { get; } =
new DynamicBackgroundWorkerManagerCapabilities
{
SupportsDynamicRegistration = true,
SupportsCronExpression = false
};
private readonly ConcurrentDictionary<string, InMemoryDynamicBackgroundWorker> _dynamicWorkers;
private readonly SemaphoreSlim _semaphore;

8
framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/DynamicBackgroundWorkerManagerCapabilities.cs

@ -1,8 +0,0 @@
namespace Volo.Abp.BackgroundWorkers;
public class DynamicBackgroundWorkerManagerCapabilities
{
public bool SupportsDynamicRegistration { get; set; } = true;
public bool SupportsCronExpression { get; set; } = true;
}

5
framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/IDynamicBackgroundWorkerManager.cs

@ -9,11 +9,6 @@ namespace Volo.Abp.BackgroundWorkers;
/// </summary>
public interface IDynamicBackgroundWorkerManager
{
/// <summary>
/// Describes the scheduling and runtime-registration capabilities of the active dynamic worker provider.
/// </summary>
DynamicBackgroundWorkerManagerCapabilities Capabilities { get; }
/// <summary>
/// Adds a dynamic worker by name, schedule and handler.
/// If a worker with the same name already exists, it will be replaced.

8
framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsCronScheduling.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.BackgroundWorkers;
/// <summary>
/// Marks a dynamic background worker manager that supports cron-based scheduling.
/// </summary>
public interface ISupportsCronScheduling
{
}

8
framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsRuntimeRegistration.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.BackgroundWorkers;
/// <summary>
/// Marks a dynamic background worker manager that supports registering workers at runtime.
/// </summary>
public interface ISupportsRuntimeRegistration
{
}

6
framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundWorkers/DynamicBackgroundWorkerManager_Tests.cs

@ -22,10 +22,10 @@ public class DynamicBackgroundWorkerManager_Tests : BackgroundJobsTestBase
}
[Fact]
public void Should_Report_Provider_Capabilities()
public void Should_Report_Provider_Capabilities_Using_Marker_Interfaces()
{
_dynamicWorkerManager.Capabilities.SupportsDynamicRegistration.ShouldBeTrue();
_dynamicWorkerManager.Capabilities.SupportsCronExpression.ShouldBeFalse();
(_dynamicWorkerManager is ISupportsRuntimeRegistration).ShouldBeTrue();
(_dynamicWorkerManager is ISupportsCronScheduling).ShouldBeFalse();
}
[Fact]

Loading…
Cancel
Save