From feddd422bcbb33e54fe865ac4251c549c9d41e60 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Tue, 23 Oct 2018 09:23:01 +0300 Subject: [PATCH] Resolved #557: Implement NullBackgroundJobManager. --- .../BackgroundJobManagerExtensions.cs | 12 +++++++++ .../NullBackgroundJobManager.cs | 25 +++++++++++++++++++ .../RabbitMQ/RabbitMqBackgroundJobManager.cs | 1 + .../Abp/BackgroundJobs/BackgroundJobWorker.cs | 3 --- .../DefaultBackgroundJobManager.cs | 5 +--- .../Volo/Abp/Emailing/EmailSenderBase.cs | 6 +++++ 6 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/NullBackgroundJobManager.cs diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobManagerExtensions.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobManagerExtensions.cs index 18a772f01f..4cc93fa533 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobManagerExtensions.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobManagerExtensions.cs @@ -1,4 +1,5 @@ using System; +using Volo.Abp.DynamicProxy; using Volo.Abp.Threading; namespace Volo.Abp.BackgroundJobs @@ -20,5 +21,16 @@ namespace Volo.Abp.BackgroundJobs { return AsyncHelper.RunSync(() => backgroundJobManager.EnqueueAsync(args, priority, delay)); } + + /// + /// Checks if background job system has a real implementation. + /// It returns false if the current implementation is . + /// + /// + /// + public static bool IsAvailable(this IBackgroundJobManager backgroundJobManager) + { + return !(ProxyHelper.UnProxy(backgroundJobManager) is NullBackgroundJobManager); + } } } diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/NullBackgroundJobManager.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/NullBackgroundJobManager.cs new file mode 100644 index 0000000000..f7d9fdd88a --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/NullBackgroundJobManager.cs @@ -0,0 +1,25 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.BackgroundJobs +{ + [Dependency(TryRegister = true)] + public class NullBackgroundJobManager : IBackgroundJobManager, ISingletonDependency + { + public ILogger Logger { get; set; } + + public NullBackgroundJobManager() + { + Logger = NullLogger.Instance; + } + + public virtual Task EnqueueAsync(TArgs args, BackgroundJobPriority priority = BackgroundJobPriority.Normal, + TimeSpan? delay = null) + { + throw new AbpException("Background job system has not a real implementation. If it's mandatory, use an implementation (either the default provider or a 3rd party implementation). If it's optional, check IBackgroundJobManager.IsAvailable() extension method and act based on it."); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/RabbitMqBackgroundJobManager.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/RabbitMqBackgroundJobManager.cs index 75b7dd801a..c2976e43fb 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/RabbitMqBackgroundJobManager.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/RabbitMqBackgroundJobManager.cs @@ -4,6 +4,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.BackgroundJobs.RabbitMQ { + [Dependency(ReplaceServices = true)] public class RabbitMqBackgroundJobManager : IBackgroundJobManager, ITransientDependency { private readonly IJobQueueManager _jobQueueManager; 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 018a426940..964f076714 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs +++ b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs @@ -17,9 +17,6 @@ namespace Volo.Abp.BackgroundJobs protected IClock Clock { get; } protected IBackgroundJobSerializer Serializer { get; } - /// - /// Initializes a new instance of the class. - /// public BackgroundJobWorker( IBackgroundJobStore store, AbpTimer timer, diff --git a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs index 7f5723456b..0c8aff450c 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs +++ b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs @@ -9,7 +9,7 @@ namespace Volo.Abp.BackgroundJobs /// /// Default implementation of . /// - [Dependency(TryRegister = true)] + [Dependency(ReplaceServices = true)] public class DefaultBackgroundJobManager : IBackgroundJobManager, ISingletonDependency { protected IClock Clock { get; } @@ -17,9 +17,6 @@ namespace Volo.Abp.BackgroundJobs protected IGuidGenerator GuidGenerator { get; } protected IBackgroundJobStore Store { get; } - /// - /// Initializes a new instance of the class. - /// public DefaultBackgroundJobManager( IClock clock, IBackgroundJobSerializer serializer, diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs index 4a2d7c16ef..14db8c10c2 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs @@ -68,6 +68,12 @@ namespace Volo.Abp.Emailing public virtual async Task QueueAsync(string to, string subject, string body, bool isBodyHtml = true) { + if (!BackgroundJobManager.IsAvailable()) + { + await SendAsync(to, subject, body, isBodyHtml); + return; + } + await BackgroundJobManager.EnqueueAsync( new BackgroundEmailSendingJobArgs {