后台工作者HangFire与ABP框架Abp.Hangfire及扩展 (4)

如果从BackgroundWorkerBase派生或直接实现IBackgroundWorker,则将覆盖/实现Start,Stop和WaitToStop方法。Start和Stop方法应该是非阻塞的,WaitToStop方法应该等待 worker完成当前的关键任务。

注册后台工作者

创建后台工作者后,我们应该将其添加到 IBackgroundWorkerManager。最常见的地方是你的模块的PostInitialize方法:

public class MyProjectWebModule : AbpModule { //... public override void PostInitialize() { var workManager = IocManager.Resolve<IBackgroundWorkerManager>(); workManager.Add(IocManager.Resolve<MakeInactiveUsersPassiveWorker>()); } }

虽然我们通常在PostInitialize中加入工作人员,但对此没有限制。您可以在任何地方注入IBackgroundWorkerManager,并在运行时添加工作人员。当您的应用程序正在关闭时,IBackgroundWorkerManager将停止并释放所有注册的工作人员。

后台工作者生命周期

后台工作人员通常以单例的。但是没有限制。如果您需要同一工人类的多个实例,则可以将其设置为暂时的,并向IBackgroundWorkerManager添加多个实例。在这种情况下,您的工作人员可能是参数化的(例如,您有一个LogCleaner类,但是他们监视的两个LogCleaner工作者实例并清除不同的日志文件夹)。

高级调度

ASP.NET Boilerplate的后台工作系统很简单。除了定期运行的工人之外,它没有一个时间表系统。如果您需要更高级的计划功能,我们建议您检查Quartz或其他库。

让您的应用程序一直运行

后台作业和工作人员只有在您的应用程序正在运行时才有效 如果很长一段时间没有对Web应用程序执行任何请求,ASP.NET应用程序将默认关闭。因此,如果您在Web应用程序中托管后台作业(这是默认行为),则应确保您的Web应用程序配置为始终运行。否则,后台作业只在您的应用程序正在使用时才起作用。
有一些技术来完成这一点。最简单的方法是定期从外部应用程序请求您的Web应用程序。因此,您也可以检查您的Web应用程序是否已启动并正在运行。 Hangfire文档解释了其他一些方法。
通过以上官方文档,我们在程序里配置一下。

运行一下效果是一样的。

#14d6ddee0b535ed2a0027765b3aecbac#


其他

其实Hangfire还是蛮简单的。如果你需要了解更多关于Abp.Hangfire的内容,建议你去看一下github上一个专门关于Abp.Hangfire的demo,
地址:https://github.com/aspnetboilerplate/aspnetboilerplate-samples/tree/master/BackgroundJobAndNotificationsDemo
另外 ABP后台工作者类使用HANGFIRE这篇文章
讲解abp Hangfire 缺点是工作者类依赖了具体的基类(PeriodicBackgroundWorkerBase),就会存在应用程序耦合。以及解决耦合的办法,算是对abp Hangfire的扩展,我不太认同,各有看法吧。

Hangfire优点

Hangfire是一个后台可监控的应用,不用每次都要从服务器拉取日志查看,在没有ELK的时候相当不方便。Hangfire控制面板不仅提供监控,也可以手动的触发执行定时任务。如果在定时任务处理方面没有很高的要求,比如一定要5s定时执行,Hangfire值得拥有。抛开这些,Hangfire优势太明显了:

持久化保存任务、队列、统计信息

重试机制

多语言支持

支持任务取消

支持按指定Job Queue处理任务

服务器端工作线程可控,即job执行并发数控制

分布式部署,支持高可用

良好的扩展性,如支持IOC、Hangfire Dashboard授权控制、Asp.net Core、持久化存储等

Hangfire扩展 Hangfire扩展性大家可以参考这里,有几个扩展是很实用的.下面这些关于Hangfire扩展大家可以自己查资料。后面如果有机会的话,我再补上。

Hangfire Dashborad日志查看

Hangfire Dashborad授权

IOC容器之Autofac

RecurringJob扩展

与MSMQ集成

持久化存储之Redis

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssxgy.html