Browse Source

Enhanced Hangfire integration

pull/11591/head
liangshiwei 5 years ago
parent
commit
05c3de3ba5
  1. 19
      framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/AbpBackgroundWorkersHangfireModule.cs
  2. 15
      framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs
  3. 13
      framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireBackgroundJobServer.cs
  4. 20
      framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireModule.cs

19
framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/AbpBackgroundWorkersHangfireModule.cs

@ -1,9 +1,11 @@
using System;
using System.Threading.Tasks;
using Hangfire;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.Hangfire;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace Volo.Abp.BackgroundWorkers.Hangfire;
@ -12,7 +14,12 @@ namespace Volo.Abp.BackgroundWorkers.Hangfire;
typeof(AbpHangfireModule))]
public class AbpBackgroundWorkersHangfireModule : AbpModule
{
public override void OnPreApplicationInitialization(ApplicationInitializationContext context)
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddSingleton(typeof(HangfirePeriodicBackgroundWorkerAdapter<>));
}
public async override Task OnPreApplicationInitializationAsync(ApplicationInitializationContext context)
{
var options = context.ServiceProvider.GetRequiredService<IOptions<AbpBackgroundWorkerOptions>>().Value;
if (!options.IsEnabled)
@ -20,13 +27,17 @@ public class AbpBackgroundWorkersHangfireModule : AbpModule
var hangfireOptions = context.ServiceProvider.GetRequiredService<IOptions<AbpHangfireOptions>>().Value;
hangfireOptions.BackgroundJobServerFactory = CreateOnlyEnqueueJobServer;
}
await context.ServiceProvider
.GetRequiredService<IBackgroundWorkerManager>()
.StartAsync();
}
public override void ConfigureServices(ServiceConfigurationContext context)
public override void OnPreApplicationInitialization(ApplicationInitializationContext context)
{
context.Services.AddSingleton(typeof(HangfirePeriodicBackgroundWorkerAdapter<>));
AsyncHelper.RunSync(() => OnPreApplicationInitializationAsync(context));
}
private BackgroundJobServer CreateOnlyEnqueueJobServer(IServiceProvider serviceProvider)
{
serviceProvider.GetRequiredService<JobStorage>();

15
framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs

@ -3,8 +3,10 @@ using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Hangfire;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
using Volo.Abp.DynamicProxy;
using Volo.Abp.Hangfire;
using Volo.Abp.Threading;
namespace Volo.Abp.BackgroundWorkers.Hangfire;
@ -12,8 +14,17 @@ namespace Volo.Abp.BackgroundWorkers.Hangfire;
[Dependency(ReplaceServices = true)]
public class HangfireBackgroundWorkerManager : IBackgroundWorkerManager, ISingletonDependency
{
private AbpHangfireBackgroundJobServer _backgroundJobServer;
private readonly IServiceProvider _serviceProvider;
public HangfireBackgroundWorkerManager(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public Task StartAsync(CancellationToken cancellationToken = default)
{
_backgroundJobServer = _serviceProvider.GetRequiredService<AbpHangfireBackgroundJobServer>();
return Task.CompletedTask;
}
@ -29,11 +40,11 @@ public class HangfireBackgroundWorkerManager : IBackgroundWorkerManager, ISingle
var unProxyWorker = ProxyHelper.UnProxy(hangfireBackgroundWorker);
if (hangfireBackgroundWorker.RecurringJobId.IsNullOrWhiteSpace())
{
RecurringJob.AddOrUpdate(() => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(),hangfireBackgroundWorker.CronExpression);
RecurringJob.AddOrUpdate(() => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(), hangfireBackgroundWorker.CronExpression);
}
else
{
RecurringJob.AddOrUpdate(hangfireBackgroundWorker.RecurringJobId,() => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(),
RecurringJob.AddOrUpdate(hangfireBackgroundWorker.RecurringJobId, () => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(),
hangfireBackgroundWorker.CronExpression);
}
}

13
framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireBackgroundJobServer.cs

@ -0,0 +1,13 @@
using Hangfire;
namespace Volo.Abp.Hangfire;
public class AbpHangfireBackgroundJobServer
{
public BackgroundJobServer HangfireJobServer { get; }
public AbpHangfireBackgroundJobServer(BackgroundJobServer hangfireJobServer)
{
HangfireJobServer = hangfireJobServer;
}
}

20
framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireModule.cs

@ -9,7 +9,7 @@ namespace Volo.Abp.Hangfire;
[DependsOn(typeof(AbpAuthorizationAbstractionsModule))]
public class AbpHangfireModule : AbpModule
{
private BackgroundJobServer _backgroundJobServer;
private AbpHangfireBackgroundJobServer _backgroundJobServer;
public override void ConfigureServices(ServiceConfigurationContext context)
{
@ -18,20 +18,26 @@ public class AbpHangfireModule : AbpModule
{
preActions.Configure(configuration);
});
}
context.Services.AddSingleton(serviceProvider =>
{
var options = serviceProvider.GetRequiredService<IOptions<AbpHangfireOptions>>().Value;
return new AbpHangfireBackgroundJobServer(options.BackgroundJobServerFactory.Invoke(serviceProvider));
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var options = context.ServiceProvider.GetRequiredService<IOptions<AbpHangfireOptions>>().Value;
_backgroundJobServer = options.BackgroundJobServerFactory.Invoke(context.ServiceProvider);
_backgroundJobServer = context.ServiceProvider.GetRequiredService<AbpHangfireBackgroundJobServer>();
}
public override void OnApplicationShutdown(ApplicationShutdownContext context)
{
if (_backgroundJobServer != null)
if (_backgroundJobServer == null)
{
_backgroundJobServer.SendStop();
_backgroundJobServer.Dispose();
return;
}
_backgroundJobServer.HangfireJobServer?.SendStop();
_backgroundJobServer.HangfireJobServer?.Dispose();
}
}

Loading…
Cancel
Save