【发布时间】:2022-10-13 03:00:10
【问题描述】:
通常我可以毫无问题地将hangfire作业排入队列。 我正在尝试将作业排入队列,动态地从数据库中获取对象/参数。 我正在通过反序列化生成参数,生成的 invoicationdata 不正确(作为对象)。 (我正在使用 ABP 框架,但我认为这个问题与 ABP 无关。)
工作队列:
public class JobExecuter
{
private readonly IBackgroundJobInboxRepository backgroundJobInboxRepository;
private readonly IJsonSerializer jsonSerializer;
private readonly IBackgroundJobManager backgroundJobManager;
public JobExecuter(
IBackgroundJobInboxRepository backgroundJobInboxRepository,
IJsonSerializer jsonSerializer,
IBackgroundJobManager backgroundJobManager)
{
this.backgroundJobInboxRepository = backgroundJobInboxRepository;
this.jsonSerializer = jsonSerializer;
this.backgroundJobManager = backgroundJobManager;
}
public async Task ExecuteAsync()
{
var item = await backgroundJobInboxRepository.FirstOrDefault();
var type = Type.GetType(item.AssemblyName);
var obj = jsonSerializer.Deserialize(type, item.Arguments, false);
await backgroundJobManager.EnqueueAsync(obj);
}
}
item.AssemblyName:
MyAssembly.BackgroundJobs.MyClass,MyAssembly,版本=1.0.0.0, 文化=中立,PublicKeyToken=null
具体类:
public class HangfireBackgroundJobManager : IBackgroundJobManager, ITransientDependency { public virtual Task<string> EnqueueAsync<TArgs>(TArgs args, BackgroundJobPriority priority = BackgroundJobPriority.Normal, TimeSpan? delay = null) { return Task.FromResult(BackgroundJob.Enqueue<HangfireJobExecutionAdapter<TArgs>>(adapter => adapter.ExecuteAsync(args))); } }我的调用数据:
{“类型”:“Volo.Abp.BackgroundJobs.Hangfire.HangfireJobExecutionAdapter`1 [[系统对象, System.Private.CoreLib, 版本=6.0.0.0, 文化=中性, PublicKeyToken=7cec85d7bea7798e]], Volo.Abp.BackgroundJobs.HangFire, 版本=5.3.3.0,文化=中性, PublicKeyToken=null","Method":"ExecuteAsync","ParameterTypes":"["系统对象, System.Private.CoreLib, 版本=6.0.0.0, 文化=中性, PublicKeyToken=7cec85d7bea7798e"]","参数":"["{\"CurrentDate\":\"2022-09-15T00:00:00+03:00\",\"DateInterval\":-5,\"项目 ID\":11}"]"}
调用数据应该是:
{“类型”:“Volo.Abp.BackgroundJobs.Hangfire.HangfireJobExecutionAdapter`1 [[MyAssembly.BackgroundJobs.MyClass, 我的程序集, 版本=1.0.0.0, 文化=中性, PublicKeyToken=null]], Volo.Abp.BackgroundJobs.HangFire,版本=5.3.3.0,文化=中性, PublicKeyToken=null","Method":"ExecuteAsync","ParameterTypes":"["MyAssembly.BackgroundJobs.MyClass, 我的程序集,版本=1.0.0.0,文化=中性, PublicKeyToken=null"]","Arguments":"["{\"CurrentDate\":\"2022-09-15T00:00:00+03:00\",\"DateInterval\":-5,\"项目 ID\":11}"]"}
附加信息:您可以访问真正的HangfireBackgroundJobManager 课程。
【问题讨论】:
标签: c# .net .net-core hangfire abp