我正在尝试使用Abp.Quartz来调度作业。
与净核心2.2一起工作,4.5英镑
我在这里做了所有类似于docs的事情-- https://aspnetboilerplate.com/Pages/Documents/Quartz-Integration,只在PostInitialize方法中解析它。
最后,我尝试了与docs完全相同的方法(从控制器启动调度程序)。
但它也不管用。工作还没开始。
namespace Cloud
{
[DependsOn(typeof(AbpZeroCoreModule),
typeof(AbpQuartzModule))]
public class CloudCoreModule : AbpModule
{
public override void PreInitialize()
{
}
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(typeof(CloudCoreModule)
.GetAssembly());
}
public override void PostInitialize()
{
IocManager.Resolve<IQuartzScheduleJobManager>().ScheduleAsync<ApiRequestQueues.ApiRequestProcessor>(
job =>
{
job
.WithIdentity("RevolutApiProcessor")
.WithDescription("A job witch processing request front");
},
trigger =>
{
trigger
.StartNow()
.WithSimpleSchedule(
schedule =>
{
schedule
.RepeatForever()
.WithIntervalInSeconds(5)
.Build();
});
});
}
}
}这是ApiRequestProcessor类
public class ApiRequestProcessor : JobBase, ITransientDependency
{
public override async Task Execute(IJobExecutionContext context)
{
//some work
}
}发布于 2021-12-10 15:12:39
迟到总比不去好。
虽然没有Abp.Quartz包,但我还是成功地实现了这一目标。如果您能够使用标准的Quartz包,可以使用以下步骤:
Startup.cs中将作业定义为正常并将其设置为正常IJob,使Quartz快乐,又实现了ITransientDependency,使ASP.NET样板高兴。DbContext,则需要确保[UnitOfWork]装饰器在您的作业类中(这对于确保作业以原子方式运行并且不影响服务器上可能发生的任何其他事务都很重要)。简而言之,一个普通的工作阶级看起来可能是这样的:
using System;
using Quartz;
namespace MyProject.MyJobService
{
[UnitOfWork]
public class SimpleJob : IJob, ITransientDependency
{
public async Task Execute(IJobExecutionContext context)
{
Console.WriteLine("Hello from quartz job!");
}
}
}在这里可以找到更多的信息和讨论(也可以看到我是如何最终得到这个解决方案的):https://github.com/aspnetboilerplate/aspnetboilerplate/issues/3757
当有疑问时,仔细阅读Quartz在应用程序输出中告诉您的内容--通常会给出错误的线索,但我相信我的解决方案会对您有效。
https://stackoverflow.com/questions/55742355
复制相似问题