Files
Yi.Admin/Yi.Abp.Net8/framework/Yi.Framework.BackgroundWorkers.Hangfire/YiFrameworkBackgroundWorkersHangfireModule.cs

55 lines
2.3 KiB
C#
Raw Normal View History

2025-02-07 17:52:38 +08:00
using System.Linq.Expressions;
using Hangfire;
using Microsoft.Extensions.Configuration;
2024-11-19 18:38:58 +08:00
using Microsoft.Extensions.DependencyInjection;
2024-11-15 18:17:53 +08:00
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.BackgroundWorkers.Hangfire;
2025-02-07 17:52:38 +08:00
using Volo.Abp.DynamicProxy;
2024-11-15 18:17:53 +08:00
namespace Yi.Framework.BackgroundWorkers.Hangfire;
[DependsOn(typeof(AbpBackgroundWorkersHangfireModule))]
2024-11-19 18:38:58 +08:00
public class YiFrameworkBackgroundWorkersHangfireModule : AbpModule
2024-11-15 18:17:53 +08:00
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddConventionalRegistrar(new YiHangfireConventionalRegistrar());
}
public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
//定时任务自动注入Abp默认只有在Quartz才实现
var backgroundWorkerManager = context.ServiceProvider.GetRequiredService<IBackgroundWorkerManager>();
var works = context.ServiceProvider.GetServices<IHangfireBackgroundWorker>();
2024-11-19 18:38:58 +08:00
2025-02-07 17:52:38 +08:00
var configuration = context.ServiceProvider.GetRequiredService<IConfiguration>();
//【特殊,为了兼容内存模式,由于内存模式任务,不能使用队列】
bool.TryParse(configuration["Redis:IsEnabled"], out var redisEnabled);
2024-11-15 18:17:53 +08:00
foreach (var work in works)
{
2025-02-08 10:37:33 +08:00
//如果为空,默认使用服务器本地上海时间
2025-02-08 10:39:53 +08:00
work.TimeZone = TimeZoneInfo.Local;
2025-02-07 17:52:38 +08:00
if (redisEnabled)
{
await backgroundWorkerManager.AddAsync(work);
}
else
{
object unProxyWorker = ProxyHelper.UnProxy((object)work);
RecurringJob.AddOrUpdate(work.RecurringJobId,
(Expression<Func<Task>>)(() =>
((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(default(CancellationToken))),
work.CronExpression, new RecurringJobOptions()
{
TimeZone = work.TimeZone
});
}
2024-11-15 18:17:53 +08:00
}
2024-11-19 18:38:58 +08:00
}
2024-11-15 18:17:53 +08:00
2024-11-19 18:38:58 +08:00
public override void OnPreApplicationInitialization(ApplicationInitializationContext context)
{
var services = context.ServiceProvider;
GlobalJobFilters.Filters.Add(services.GetRequiredService<UnitOfWorkHangfireFilter>());
2024-11-15 18:17:53 +08:00
}
}