diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs index e5cef1ce42..3432c2deed 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs @@ -1,6 +1,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using Hangfire.States; namespace Volo.Abp.BackgroundWorkers.Hangfire; @@ -19,6 +20,7 @@ public abstract class HangfireBackgroundWorkerBase : BackgroundWorkerBase, IHang protected HangfireBackgroundWorkerBase() { TimeZone = null; - Queue = "default"; + Queue = EnqueuedState.DefaultQueue; + TimeZone = TimeZoneInfo.Utc; } } diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs index db993022ce..59fbf370ee 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs @@ -1,8 +1,10 @@ using System; +using System.Linq.Expressions; using System.Reflection; using System.Threading; using System.Threading.Tasks; using Hangfire; +using Hangfire.Common; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.DependencyInjection; using Volo.Abp.DynamicProxy; @@ -35,39 +37,41 @@ public class HangfireBackgroundWorkerManager : BackgroundWorkerManager, ISinglet case IHangfireBackgroundWorker hangfireBackgroundWorker: { var unProxyWorker = ProxyHelper.UnProxy(hangfireBackgroundWorker); - if (hangfireBackgroundWorker.RecurringJobId.IsNullOrWhiteSpace()) - { - RecurringJob.AddOrUpdate( - () => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(cancellationToken), - hangfireBackgroundWorker.CronExpression, hangfireBackgroundWorker.TimeZone, - hangfireBackgroundWorker.Queue); - } - else - { - RecurringJob.AddOrUpdate(hangfireBackgroundWorker.RecurringJobId, - () => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(cancellationToken), - hangfireBackgroundWorker.CronExpression, hangfireBackgroundWorker.TimeZone, - hangfireBackgroundWorker.Queue); - } + + RecurringJob.AddOrUpdate( + hangfireBackgroundWorker.RecurringJobId, + hangfireBackgroundWorker.Queue, + () => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(cancellationToken), + hangfireBackgroundWorker.CronExpression, + new RecurringJobOptions + { + TimeZone = hangfireBackgroundWorker.TimeZone + }); break; } case AsyncPeriodicBackgroundWorkerBase or PeriodicBackgroundWorkerBase: { - var timer = worker.GetType() - .GetProperty("Timer", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(worker); - + var timer = worker.GetType().GetProperty("Timer", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(worker); var period = worker is AsyncPeriodicBackgroundWorkerBase ? ((AbpAsyncTimer?)timer)?.Period : ((AbpTimer?)timer)?.Period; if (period == null) { return; } - + var adapterType = typeof(HangfirePeriodicBackgroundWorkerAdapter<>).MakeGenericType(ProxyHelper.GetUnProxiedType(worker)); var workerAdapter = (Activator.CreateInstance(adapterType) as IHangfireBackgroundWorker)!; - RecurringJob.AddOrUpdate(() => workerAdapter.DoWorkAsync(cancellationToken), GetCron(period.Value), workerAdapter.TimeZone, workerAdapter.Queue); + RecurringJob.AddOrUpdate( + workerAdapter.RecurringJobId, + workerAdapter.Queue, + () => workerAdapter.DoWorkAsync(cancellationToken), + GetCron(period.Value), + new RecurringJobOptions + { + TimeZone = workerAdapter.TimeZone + }); break; } diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs index d624966fe4..faff49b3a9 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs @@ -1,4 +1,5 @@ -using System.Reflection; +using System; +using System.Reflection; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -13,9 +14,11 @@ public class HangfirePeriodicBackgroundWorkerAdapter : HangfireBackgrou public HangfirePeriodicBackgroundWorkerAdapter() { - _doWorkAsyncMethod = - typeof(TWorker).GetMethod("DoWorkAsync", BindingFlags.Instance | BindingFlags.NonPublic)!; + _doWorkAsyncMethod = typeof(TWorker).GetMethod("DoWorkAsync", BindingFlags.Instance | BindingFlags.NonPublic)!; _doWorkMethod = typeof(TWorker).GetMethod("DoWork", BindingFlags.Instance | BindingFlags.NonPublic)!; + + TimeZone = TimeZoneInfo.Utc; + RecurringJobId = typeof(TWorker).Name; } public async override Task DoWorkAsync(CancellationToken cancellationToken = default) @@ -33,4 +36,6 @@ public class HangfirePeriodicBackgroundWorkerAdapter : HangfireBackgrou break; } } + + }