开源的.NET定时任务组件Hangfire开发总结

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源的.NET定时任务组件Hangfire开发总结相关的知识,希望对你有一定的参考价值。

 定时任务调度问题,是一个老生常谈的问题。网上有许多定时任务调度的解决方案,以前主要是使用Window计划和Window服务来做任务定时执行,然后就开始使用定时任务调度框架Quartz.Net。Hangfire这个自带后台任务调度面板,可以在后台手动执行任务的神奇的任务调度框架。

 Hangfire是一个开源的.NET任务调度框架,提供了内置集成化的控制台,可以直观明了的查看作业调度情况,并且Hangfire不需要依赖于单独的应用程序执行(如:windows服务,window计划)。并且支持持久性存储。

最近在搞Hangfire任务,下面总结下几个设置

1、配置面板权限

var filter = new BasicAuthAuthorizationFilter(
            new BasicAuthAuthorizationFilterOptions
            
                SslRedirect = false,
                RequireSsl = false,
                LoginCaseSensitive = false,
                Users = new[]
                
                        new BasicAuthAuthorizationUser
                        
                            Login = System.Configuration.ConfigurationManager.AppSettings["user"],
                               PasswordClear = System.Configuration.ConfigurationManager.AppSettings["pwd"]
                        
                
            );


            var options = new DashboardOptions
            
                AuthorizationFilters = new[] 
                    filter
                
            ;


            app.UseHangfireDashboard("/hangfire", options);

2、已完成的job设置过期,防止数据无限增长

public class SucceededStateExpireHandler : IStateHandler
    
        public TimeSpan JobExpirationTimeout;


        public SucceededStateExpireHandler(int jobExpirationTimeout)
        
            JobExpirationTimeout = TimeSpan.FromMinutes(jobExpirationTimeout);
        


        public string StateName => SucceededState.StateName;


        public void Apply(ApplyStateContext context, IWriteOnlyTransaction transaction)
        
            context.JobExpirationTimeout = JobExpirationTimeout;
        


        public void Unapply(ApplyStateContext context, IWriteOnlyTransaction transaction)
        
        

3、设置工作的线程数

app.UseHangfireServer(new BackgroundJobServerOptions  WorkerCount = int.Parse(System.Configuration.ConfigurationManager.AppSettings["WorkerCount"]) );

4、添加BackgroundJob

try
            
                BackgroundJob.Enqueue(() => CreateJob(info));
            
            catch (Exception ex)
            
                Logger.Default.Error("CreateJob失败 " + ex.ToString());
            
            TextBuffer.WriteLine("Background job has been created.");

以上是关于开源的.NET定时任务组件Hangfire开发总结的主要内容,如果未能解决你的问题,请参考以下文章

Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务

Hangfire入门(任务调度)

C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件有哪些,Timer,FluentScheduler,TaskScheduler,Gofer.NET,Coravel,Qua

Hangfire项目实践

ABP集成Hangfire

Core 定时任务之HangFire