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頁面,如下
輸入賬号密碼後,即可進入到任務管理器 界面。
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);
}
}
}