.NET6 Hangfire

.NET6 MVC项目(其它类型也可以),最简单的步骤运行hangfire,据说支持分布式,等回头再研究下。

1、NuGet安装包

2、Program.cs文件

services.AddHangfire(configura =>
{
    configura.UseStorage(new MemoryStorage());
});

此处我未设置持久化,如果需要sqlserver设置,参考:https://www.cnblogs.com/PrintY/p/14224495.html

app.UseHangfireServer();
app.UseHangfireDashboard("/hangfire", new DashboardOptions()
{
    //访问面板需要登录,此处也可以不设置
    Authorization = new[]
    {
        new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions
            {
                SslRedirect = false,          // 是否将所有非SSL请求重定向到SSL URL
                RequireSsl = false,           // 需要SSL连接才能访问HangFire Dahsboard。强烈建议在使用基本身份验证时使用SSL
                LoginCaseSensitive = false,   //登录检查是否区分大小写
                Users = new[]                 //配置登陆账号和密码
                {
                    new BasicAuthAuthorizationUser
                    {
                        Login ="admin",
                        PasswordClear="123456"
                    }
                }
            })
    }
});

支持的任务有很多类型,请参考以下,copy过来的。

//支持基于队列的任务处理:任务执行不是同步的,而是放到一个持久化队列中,以便马上把请求控制权返回给调用者。
var jobId = BackgroundJob.Enqueue(()=>WriteLog("队列任务执行了!"));

//延迟任务执行:不是马上调用方法,而是设定一个未来时间点再来执行,延迟作业仅执行一次
var jobId = BackgroundJob.Schedule(()=>WriteLog("一天后的延迟任务执行了!"),TimeSpan .FromDays(1));//一天后执行该任务

//循环任务执行:一行代码添加重复执行的任务,其内置了常见的时间循环模式,也可基于CRON表达式来设定复杂的模式。【用的比较的多】
RecurringJob.AddOrUpdate(()=>WriteLog("每分钟执行任务!"), Cron.Minutely); //注意最小单位是分钟

//延续性任务执行:类似于.NET中的Task,可以在第一个任务执行完之后紧接着再次执行另外的任务
BackgroundJob.ContinueWith(jobId,()=>WriteLog("连续任务!"));

//不调用方法,仅输出测试
RecurringJob.AddOrUpdate("每4时执行一次", () => Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")), "0 0 */4 * * ?", TimeZoneInfo.Local);

也可以执行自己定义Job,其中Y.TestJob就是普通的类,里面定义好方法,没啥特别的。

RecurringJob.AddOrUpdate<Y.TestJob>("Y.测试任务", e => e.SyncData(), Cron.Minutely, TimeZoneInfo.Local);

3、访问面板

https://localhost:7099/hangfire

4、其它

我的这个是寄宿在windows系统的IIS中,那么就有个问题,IIS每天都会回收,就会导致不能按时触发调度任务,可能在程序再被唤醒的时候才能触发,所以记得设置IIS禁止自动回收。 

至于如何设置禁止自动回收比较简单,可以看下我另外一个博客:https://www.cnblogs.com/PrintY/p/15848746.html

 

 

 

 

 

 

Reference:

https://www.cnblogs.com/PrintY/p/14224495.html

https://blog.csdn.net/qq_43369949/article/details/119486690

https://www.cnblogs.com/1175429393wljblog/p/13407506.html

https://blog.csdn.net/qq_38762313/article/details/100656731

https://www.cnblogs.com/memoyu/p/13955094.html

 

posted @ 2022-01-15 17:42  PrintY  阅读(1295)  评论(0编辑  收藏  举报