后台作业:
为执行长时间运行任务而用户无需等待,为创建可重试且稳定的任务来保证一个代码将会被成功运行,提高系统的稳定性
https://docs.abp.io/zh-Hans/abp/latest/Background-Jobs
1)定义任务类和要执行的逻辑
创建JobClass:BackgroundJob<propertyObj>, ITransientDependency,并重写Execute方法 2)service或domain层调用作业任务
引用IBackgroundJobManager _manager
调用_manager.EnqueueAsync(obj)执行后台作业,可通过参数控制是否延后多久执行等
后台任务:
独立现场,定期执行一些任务
https://docs.abp.io/zh-Hans/abp/latest/Background-Workers
方案一:
1)创建服务类ServiceA:BackgroundWorkerBase(在IBackgroundWorker上提供了像Logger等常用属 性),重写start和stop方法。
2)或者ServiceA:AsyncPeriodicBackgroundWorkerBase(简化了创建定期工作者的过程),继承和重写父类的AbpTimer(定义执行周期)和IServiceScopeFactory,重写DoWork方法
3)在abpmodule中依赖AbpBackgroundWorkersModule,OnApplicationInitializationAsync添加 context.AddBackgroundWorkerAsync<ServiceA>(); 也可以在应用程序的任何地方注入 IBackgroundWorkerManager并在运行时添加工作者
方案二:
引入Quartz
1)abpmodule中依赖
AbpBackgroundWorkersQuartzModule2)创建 ServiceLaunchTrigger:
QuartzBackgroundWorkerBase3)构造方法中赋值JobDetail和Trigger,
JobDetail = JobBuilder.Create<ServiceLaunchTrigger>().WithIdentity("ServiceLaunch").Build();
Trigger = TriggerBuilder.Create().WithIdentity("ServiceLaunchTrigger").StartNow().Build();
4)重写Execute方法,默认单例,默认后台工作者会在应用程序启动时自动添加
BackgroundWorkerManager。注意事务using (var uow = _unitOfWorkManager.Begin(true)){ await uow.CompleteAsync();}方案三:
引入Quartz
1)创建CheckJob : IJob, ISingletonDependency,重写Execute方法
2)service或domain中引入IScheduler,创建job和trigger,开启定时任务,任务开启后会自动添加到数据库中,服务下次启动的时候,会读取数据库再次开始执行任务。
var job = JobBuilder.Create<CheckJob>()
.WithIdentity(jobKeyValue, _group)
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity(jobKeyValue + "Trigger", _group)
.StartNow()
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10, 0).WithMisfireHandlingInstructionFireAndProceed())
.Build();
await _scheduler.ScheduleJob(job, trigger);
3)一次性执行在给定时刻单次执行作业,或者在给定时间触发作业且重复多次,用SimpleTrigger配置,RepateCount、Interval。类似日历的时间表去触发,例如每周五上午或每月10天15点,用CronTrigger(cron maker自动生成),配置CronSchedule。
4)WithMisfireHandlingInstructionFireAndProceed,Misfire指:周期性的任务在规定的某个时间执行但由于某种原因未执行,补偿机制:DoNothing(忽略不触发立即执行等待下次),IgnoreMisfires(立即把错过的都执行一遍),FireAndProceed(默认,以当前时间未触发频率立刻触发一次执行然后按照配置频率依次执行)
补充:abp配置Quartz存储任务到数据库里
1,HttpApiHostModule的PreConfigureServices加配置:
PreConfigure<AbpQuartzOptions>(options =>
{
options.Configurator = configure =>
{
configure.UsePersistentStore(storeOptions =>
{
storeOptions.UseProperties = false;
storeOptions.UseJsonSerializer();
storeOptions.UsePostgres("User ID=postgres;Password=pasword;Host=localhost;Port=5432;Database=DBName;"));
});//改为自己的数据库
};
});2,在官网里找到Quartz的数据库表,加到自己的数据库里。
本文介绍了如何在ABP框架中使用BackgroundJobs和Quartz模块进行后台任务的定义、执行以及管理,包括创建任务类、服务层调用、定时任务调度、数据库存储配置等内容,确保系统的稳定性和任务可靠性。



1862

被折叠的 条评论
为什么被折叠?



