天天看点

Asp.netcore使用Hangfire来配置任务管理器

1. 下载并引用NuGet组件包

     Hangfire.AspNetCore 【1.7.1】版本

     Hangfire.Dashboard.BasicAuthorization

     Hangfire.Mongo // 下面写法适应于Hangfire.Mongo 的【 0.5.15】版本  我这里使用的是Mongo数据库,所以下载这个 ,别的数据库有别的对应的版本

2. 修改Startup里面的 ConfigureServices

    添加HangFire配置

//配置定时任务管理器
services.AddHangfire(x => x.UseStorage(new MongoStorage(MongoClientSettings.FromConnectionString(Configuration["MongoContext:ConnectionString"]), Configuration["MongoContext:Database"]
               , new MongoStorageOptions
{
                   QueuePollInterval = TimeSpan.FromSeconds(15),             //- 作业队列轮询间隔。默认值为15秒。
                   JobExpirationCheckInterval = TimeSpan.FromHours(1),       //- 作业到期检查间隔(管理过期记录)。默认值为1小时。
                   CountersAggregateInterval = TimeSpan.FromMinutes(5),      //- 聚合计数器的间隔。默认为5分钟。
                   Prefix = "Hangfire"                                  //- 数据库中表的前缀。默认为none
})));
           

 修改Startup里面的Configure

 添加HangFire配置

//配置hangfire访问路径
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"
                    }
                }
            })
    }
});
           

3.如上所示,HangFire已经配置完成。打开http://localhost:5001/hangfire即可进入hangfire页面,如下

Asp.netcore使用Hangfire来配置任务管理器

输入账号密码后,即可进入到任务管理器 界面。

Asp.netcore使用Hangfire来配置任务管理器

4. 创建任务的方法的分享:

using Hangfire;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;

namespace Jobs
{
    /// <summary>
    /// 周期性内容的Cron生成器
    /// </summary>
    public static class CycleCronType
    {
        /// <summary>
        /// 创建/更新名称为workName周期性为分钟的任务
        /// </summary>
        /// <param name="interval">执行周期的间隔,默认为每分钟一次</param>
        /// <returns></returns>
        public static string Minute(int interval = 1)
        {
            return "1 0/" + interval.ToString() + " * * * ? ";
        }

        /// <summary>
        /// 创建/更新名称为workName周期性为小时的任务
        /// </summary>
        /// <param name="minute">第几分钟开始,默认为第一分钟</param>
        /// <param name="interval">执行周期的间隔,默认为每小时一次</param>
        /// <returns></returns>
        public static string Hour(int minute=1, int interval = 1)
        {
            return "1 " + minute + " 0/" + interval.ToString() + " * * ? ";
        }

        /// <summary>
        /// 创建/更新名称为workName周期性为天的任务
        /// </summary>
        /// <param name="hour">第几小时开始,默认从1点开始</param>
        /// <param name="minute">第几分钟开始,默认从第1分钟开始</param>
        /// <param name="interval">执行周期的间隔,默认为每天一次</param>
        /// <returns></returns>
        public static string Day(int hour=1,int minute=1, int interval = 1)
        {
            return "1 "+minute.ToString()+" "+hour.ToString()+" 1/"+interval.ToString()+" * ? ";
        }

        /// <summary>
        /// 创建/更新名称为workName周期性为周的任务
        /// </summary>
        /// <param name="dayOfWeek">星期几开始,默认从星期一点开始</param>
        /// <param name="hour">第几小时开始,默认从1点开始</param>
        /// <param name="minute">第几分钟开始,默认从第1分钟开始</param>
        /// <returns></returns>
        public static string Week(DayOfWeek dayOfWeek=DayOfWeek.Monday,int hour = 1, int minute = 1)
        {
            // "* " + minute.ToString() + " " + hour.ToString() + " 1/" + interval.ToString() + " * ? *";
            return Cron.Weekly(dayOfWeek, hour, minute);
        }

        /// <summary>
        /// 创建/更新名称为workName周期性为月的任务
        /// </summary>
        /// <param name="day">几号开始,默认从一号开始</param>
        /// <param name="hour">第几小时开始,默认从1点开始</param>
        /// <param name="minute">第几分钟开始,默认从第1分钟开始</param>
        /// <returns></returns>
        public static string Month(int day=1, int hour = 1, int minute = 1)
        {
            // "* " + minute.ToString() + " " + hour.ToString() + " 1/" + interval.ToString() + " * ? *";
            return Cron.Monthly(day, hour, minute);
        }

        /// <summary>
        /// 创建/更新名称为workName周期性为年的任务
        /// </summary>
        /// <param name="month">几月开始,默认从一月开始</param>
        /// <param name="day">几号开始,默认从一号开始</param>
        /// <param name="hour">第几小时开始,默认从1点开始</param>
        /// <param name="minute">第几分钟开始,默认从第1分钟开始</param>
        /// <returns></returns>
        public static string Year(int month=1,int day = 1, int hour = 1, int minute = 1)
        {
            // "* " + minute.ToString() + " " + hour.ToString() + " 1/" + interval.ToString() + " * ? *";
            return Cron.Yearly(month, day, hour, minute);
        }

    }

    /// <summary>
    /// 周期性任务
    /// 猴子 2019-04-18
    /// </summary>
    public static class CycleJob
    {
        // <summary>
        /// 创建/更新名称为workName,周期性为cronType的任务
        ///</summary>
        public static void AddOrUpdate(string workName, Expression<Func<Task>> expression,string cronType)
        {
            RecurringJob.AddOrUpdate(workName, expression, cronType, TimeZoneInfo.Local);
        }

        // <summary>
        /// 创建/更新名称为workName,周期性为cronType的任务
        ///</summary>
        public static void AddOrUpdate(string workName, Expression<Action> expression, string cronType)
        {
            RecurringJob.AddOrUpdate(workName, expression, cronType, TimeZoneInfo.Local);
        }

    }

    /// <summary>
    /// 延迟性任务
    /// 猴子 2019-04-18
    /// </summary>
    public static class DelayedJob
    {
        /// <summary>
        /// 创建延迟任务
        /// </summary>
        /// <param name="expression">执行的函数</param>
        /// <param name="minute">延迟的分钟数</param>
        public static void AddOrUpdate(Expression<Func<Task>> expression,int minute)
        {
            BackgroundJob.Schedule(expression, TimeSpan.FromMinutes(minute));
        }


        /// <summary>
        /// 创建延迟任务
        /// </summary>
        /// <param name="expression">执行的函数</param>
        /// <param name="minute">延迟的分钟数</param>
        public static void AddOrUpdate(Expression<Action> expression, int minute)
        {
            BackgroundJob.Schedule(expression, TimeSpan.FromMinutes(minute));
        }

    }

    /// <summary>
    /// 队列任务
    /// 猴子 2019-04-18
    /// </summary>
    public static class QueueJob
    {
        /// <summary>
        /// 创建队列任务
        /// </summary>
        /// <param name="expression">执行的函数</param>
        public static void AddOrUpdate(Expression<Func<Task>> expression)
        {
            BackgroundJob.Enqueue(expression);
        }

        /// <summary>
        /// 创建队列任务
        /// </summary>
        /// <param name="expression">执行的函数</param>
        public static void AddOrUpdate(Expression<Action> expression)
        {
            BackgroundJob.Enqueue(expression);
        }

    }
    
}
           

继续阅读