From 373877cfcf4841e0b2625db8339439937488cdb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Fri, 7 Feb 2025 17:52:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81hangfire=E5=86=85?= =?UTF-8?q?=E5=AD=98=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rameworkBackgroundWorkersHangfireModule.cs | 24 +++++++++++++++++-- Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs | 4 ++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Yi.Abp.Net8/framework/Yi.Framework.BackgroundWorkers.Hangfire/YiFrameworkBackgroundWorkersHangfireModule.cs b/Yi.Abp.Net8/framework/Yi.Framework.BackgroundWorkers.Hangfire/YiFrameworkBackgroundWorkersHangfireModule.cs index fce1a566..74e5c223 100644 --- a/Yi.Abp.Net8/framework/Yi.Framework.BackgroundWorkers.Hangfire/YiFrameworkBackgroundWorkersHangfireModule.cs +++ b/Yi.Abp.Net8/framework/Yi.Framework.BackgroundWorkers.Hangfire/YiFrameworkBackgroundWorkersHangfireModule.cs @@ -1,7 +1,10 @@ -using Hangfire; +using System.Linq.Expressions; +using Hangfire; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.BackgroundWorkers; using Volo.Abp.BackgroundWorkers.Hangfire; +using Volo.Abp.DynamicProxy; namespace Yi.Framework.BackgroundWorkers.Hangfire; @@ -19,11 +22,28 @@ public class YiFrameworkBackgroundWorkersHangfireModule : AbpModule var backgroundWorkerManager = context.ServiceProvider.GetRequiredService(); var works = context.ServiceProvider.GetServices(); + var configuration = context.ServiceProvider.GetRequiredService(); + //【特殊,为了兼容内存模式,由于内存模式任务,不能使用队列】 + bool.TryParse(configuration["Redis:IsEnabled"], out var redisEnabled); foreach (var work in works) { //如果为空,默认使用服务器本地utc时间 work.TimeZone ??= TimeZoneInfo.Local; - await backgroundWorkerManager.AddAsync(work); + if (redisEnabled) + { + await backgroundWorkerManager.AddAsync(work); + } + else + { + object unProxyWorker = ProxyHelper.UnProxy((object)work); + RecurringJob.AddOrUpdate(work.RecurringJobId, + (Expression>)(() => + ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(default(CancellationToken))), + work.CronExpression, new RecurringJobOptions() + { + TimeZone = work.TimeZone + }); + } } } diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs b/Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs index cafc970b..fb3d8bf6 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs @@ -188,10 +188,10 @@ namespace Yi.Abp.Web //配置Hangfire定时任务存储,开启redis后,优先使用redis var redisConfiguration = configuration["Redis:Configuration"]; - var redisEnabled = configuration["Redis:IsEnabled"]; context.Services.AddHangfire(config=> { - if (redisEnabled.IsNullOrEmpty() || bool.Parse(redisEnabled)) + bool.TryParse( configuration["Redis:IsEnabled"], out var redisEnabled); + if (redisEnabled) { config.UseRedisStorage( ConnectionMultiplexer.Connect(redisConfiguration),