ITPub博客

首页 > 数据库 > 数据库开发技术 > 开源的.NET定时任务组件Hangfire开发总结

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

原创 数据库开发技术 作者:后端Q 时间:2021-11-27 00:00:00 0 删除 编辑

 定时任务调度问题,是一个老生常谈的问题。网上有许多定时任务调度的解决方案,以前主要是使用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.");


原文作者:后端Q;如有侵权,请联系管理员删除。

上一篇: C#Socket通信
下一篇: winform进度条实现
请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    726140