From 0c512bcd826bdd6cdd001abeb28d4e1bb54742f1 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Tue, 12 Mar 2024 11:57:08 +0800 Subject: [PATCH] 113/03/12 --- Hangfire.drawio | 22 +++ .../Controllers/JobController.cs | 76 +++++++++++ .../Extensions/HangfireExtension.cs | 30 ++++- .../Filters/DashboardAuthorizationFilter.cs | 17 +++ .../HangfireExample.WebService.csproj | 4 - HangfireExample.WebService/HangfireExample.db | Bin 159744 -> 159744 bytes .../Properties/launchSettings.json | 44 +++--- .../Services/IJobService.cs | 13 ++ HangfireExample.WebService/appsettings.json | 3 + HangfireExample/Program.cs | 1 + HangfireResources/BackToSite.jpg | Bin 0 -> 118630 bytes README.md | 127 +++++++++++++++++- 12 files changed, 308 insertions(+), 29 deletions(-) create mode 100644 Hangfire.drawio create mode 100644 HangfireExample.WebService/Controllers/JobController.cs create mode 100644 HangfireExample.WebService/Filters/DashboardAuthorizationFilter.cs create mode 100644 HangfireExample.WebService/Services/IJobService.cs create mode 100644 HangfireResources/BackToSite.jpg diff --git a/Hangfire.drawio b/Hangfire.drawio new file mode 100644 index 0000000..3beeab8 --- /dev/null +++ b/Hangfire.drawio @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/HangfireExample.WebService/Controllers/JobController.cs b/HangfireExample.WebService/Controllers/JobController.cs new file mode 100644 index 0000000..af86580 --- /dev/null +++ b/HangfireExample.WebService/Controllers/JobController.cs @@ -0,0 +1,76 @@ +using Hangfire; +using HangfireExample.WebService.Services; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System.ComponentModel; + +namespace HangfireExample.WebService.Controllers +{ + [Route("Job")] + [ApiController] + public class JobController : ControllerBase, IJobService + { + public JobController() { } + + [HttpPost("Continuation", Name = "Continuation"), Produces("application/json")] + public string Continuation(string message, string jobId) + { + return BackgroundJob.ContinueJobWith(jobId, () => ContinuationJob(message, jobId)); + } + + [NonAction] + [DisplayName("Continuation, Job Id = {1}")] + public static void ContinuationJob(string message, string jobId) + { + Console.WriteLine("{0}: {1}", DateTimeOffset.Now, message); + } + + [HttpPost("Delay", Name = "Delay"), Produces("application/json")] + public string Delay(string message, int seconds, int minutes = 0, int hours = 0, int days = 0) + { + TimeSpan delay = + seconds > 0 ? TimeSpan.FromSeconds(seconds) : + minutes > 0 ? TimeSpan.FromMinutes(minutes) : + hours > 0 ? TimeSpan.FromHours(hours) : + days > 0 ? TimeSpan.FromDays(days) : throw new Exception("未指定延遲時間"); + return BackgroundJob.Schedule(() => DelayJob(message, seconds, minutes, hours, days), delay); + } + + [NonAction] + [DisplayName("Delay, Day = {4}, Hour = {3}, Minute = {2}, Second = {1}")] + public static void DelayJob(string message, int seconds, int minutes = 0, int hours = 0, int days = 0) + { + Console.WriteLine("{0}: {1}", DateTimeOffset.Now, message); + } + + [HttpPost("Fire", Name = "Fire"), Produces("application/json")] + public string Fire(string message) + { + return BackgroundJob.Enqueue(() => FireJob(message)); + } + + [NonAction] + [DisplayName("Fire")] + public static void FireJob(string message) + { + Console.WriteLine("{0}: {1}", DateTimeOffset.Now, message); + } + + [HttpPost("Recurring", Name = "Recurring"), Produces("application/json")] + public string Recurring(string message, string jobId, string expression) + { + RecurringJob.RemoveIfExists(jobId); + + RecurringJob.AddOrUpdate(jobId, () => _RecurringJob(message, jobId, expression), expression); + + return jobId; + } + + [NonAction] + [DisplayName("Recurring, JobId = {1}, Cron expression = {2}")] + public static void _RecurringJob(string message, string jobId, string expression) + { + Console.WriteLine("{0}: {1}", DateTimeOffset.Now, message); + } + } +} diff --git a/HangfireExample.WebService/Extensions/HangfireExtension.cs b/HangfireExample.WebService/Extensions/HangfireExtension.cs index 013efbe..0f26f85 100644 --- a/HangfireExample.WebService/Extensions/HangfireExtension.cs +++ b/HangfireExample.WebService/Extensions/HangfireExtension.cs @@ -1,5 +1,7 @@ using Hangfire; +using Hangfire.Dashboard; using Hangfire.Storage.SQLite; +using HangfireExample.WebService.Filters; namespace HangfireExample.WebService.Extensions { @@ -18,13 +20,37 @@ namespace HangfireExample.WebService.Extensions // 將 Hangfire 加入服務,使用 SQLite 作為儲存區 services.AddHangfire(configuration => configuration .UseSQLiteStorage("HangfireExample.db")); + // 將 Hangfire Server 加入服務 + services.AddHangfireServer(options => + { + // 指定 Hangfire Server 的名稱 + options.ServerName = "HangfireExample"; + // 指定 Hangfire Server 執行佇列的 Tags + options.Queues = ["default", "wb",]; + }); return services; } public static WebApplication UseHangfireDashboard(this WebApplication app, IConfiguration configuration) { - // HangfireDashboard 預設路由為 /Hangfire - app.UseHangfireDashboard(configuration.GetValue("DashboardRoot")); + // Hangfire Dashboard 預設路由為 /Hangfire + app.UseHangfireDashboard(configuration.GetValue("DashboardRoot"), new DashboardOptions + { + Authorization = [new DashboardAuthorizationFilter()], + // 指定 Dashboard 指定讀取,不能操作,如重新執行、再次加入排程與刪除任務等 + IsReadOnlyFunc = (DashboardContext context) => true, + // 指定 Back to site 的連結 + AppPath = "/swagger", + }); + // 設定第二資料來源的 Dashboard + //app.UseHangfireDashboard(configuration.GetValue("DashboardRoot"), new DashboardOptions + //{ + // Authorization = [new DashboardAuthorizationFilter()], + // // 指定 Dashboard 指定讀取,不能操作,如重新執行、再次加入排程與刪除任務等 + // IsReadOnlyFunc = (DashboardContext context) => true, + // // 指定 Back to site 的連結 + // AppPath = "/swagger", + //}, new SQLiteStorage("HangfireExample2.db")); return app; } } diff --git a/HangfireExample.WebService/Filters/DashboardAuthorizationFilter.cs b/HangfireExample.WebService/Filters/DashboardAuthorizationFilter.cs new file mode 100644 index 0000000..38c7e10 --- /dev/null +++ b/HangfireExample.WebService/Filters/DashboardAuthorizationFilter.cs @@ -0,0 +1,17 @@ +using Hangfire.Annotations; +using Hangfire.Dashboard; + +namespace HangfireExample.WebService.Filters +{ + /// + /// Hangfire Dashboard 的認證過濾中介。 + /// + public class DashboardAuthorizationFilter : IDashboardAuthorizationFilter + { + public bool Authorize([NotNull] DashboardContext context) + { + // 認證時,直接回傳成功(無驗證) + return true; + } + } +} diff --git a/HangfireExample.WebService/HangfireExample.WebService.csproj b/HangfireExample.WebService/HangfireExample.WebService.csproj index e5635c9..801b9ed 100644 --- a/HangfireExample.WebService/HangfireExample.WebService.csproj +++ b/HangfireExample.WebService/HangfireExample.WebService.csproj @@ -12,8 +12,4 @@ - - - - diff --git a/HangfireExample.WebService/HangfireExample.db b/HangfireExample.WebService/HangfireExample.db index 237a782f1c297fa002ead7716715fce294d51556..957072fab91ee894952e06e7c5b067f0dbee61ea 100644 GIT binary patch literal 159744 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 QM!?>~(q5~e$65jZ4_>JMHUIzs delta 93 zcmZp8z}fJCa|4UOVwMdC5PSj7-psP$kN%Z1}+s E0Bg!9!T + /// Job 服務。 + /// + public interface IJobService + { + public string Fire(string message); + public string Delay(string message, int seconds, int minutes = 0, int hours = 0, int days = 0); + public string Recurring(string message, string jobId, string expression); + public string Continuation(string message, string jobId); + } +} diff --git a/HangfireExample.WebService/appsettings.json b/HangfireExample.WebService/appsettings.json index e1258a6..6203d99 100644 --- a/HangfireExample.WebService/appsettings.json +++ b/HangfireExample.WebService/appsettings.json @@ -1,4 +1,7 @@ { + "ConnectionStrings": { + "Hangfire": "HangfireExample.db" + }, "Logging": { "LogLevel": { "Default": "Information", diff --git a/HangfireExample/Program.cs b/HangfireExample/Program.cs index 05417a7..8593808 100644 --- a/HangfireExample/Program.cs +++ b/HangfireExample/Program.cs @@ -1,4 +1,5 @@ using Hangfire; +using Hangfire.SqlServer; using Hangfire.Storage.SQLite; // 第三方擴充: Hangfire.Storage.SQLite 0.4.1 diff --git a/HangfireResources/BackToSite.jpg b/HangfireResources/BackToSite.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0de8efa25a7318150863da08d6d50841294db51c GIT binary patch literal 118630 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 aC5Rg0^d}(>M2_Cb%d6ahci;4}_x}KBG75nJ literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 3f891f1..3f8c98c 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,131 @@ GlobalConfiguration CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, - UseRecommendedIsolationLevel = true + UseRecommendedIsolationLevel = true, + DisableGlobalLocks = true, // Migration to Schema 7 is required }); + +// Hangfire SQLite +GlobalConfiguration + .Configuration + .UseSQLiteStorage("HangfireExample.db")); +``` + +## Server + +啟動 Hangfire 伺服器 + +``` +services.AddHangfireServer(); +``` + +## Using Dashboard UI + +開啟 Dashboard 功能 + +``` +app.UseHangfireDashboard(); +``` + +* Configuring Authorization + +設定自定義驗證 + +``` +app.UseHangfireDashboard("hangfire", new DashboardOptions +{ + Authorization = [new DashboardAuthorizationFilter()], +}); +``` + +* Read-only view + +設定 UI 為 ReadOnly + +``` +app.UseHangfireDashboard("hangfire", new DashboardOptions +{ + IsReadOnlyFunc = (DashboardContext context) => true, +}); +``` + +* Change URL Mapping + +修改 Dashboard UI 的預設根路由 + +``` +app.UseHangfireDashboard("hangfire"); +``` + +* Change Back to site Link + +修改返回按鈕的路由 + +``` +app.UseHangfireDashboard("hangfire", new DashboardOptions +{ + AppPath = "/swagger", // 導向到 Swagger UI +}); +``` + +![BackToSite](HangfireResources/BackToSite.jpg) + +* Multiple Dashboards + +設定不同資料來源的 Dashboard + +``` +app.UseHangfireDashboard(configuration.GetValue("DashboardRoot"), new DashboardOptions +{ + Authorization = [new DashboardAuthorizationFilter()], + // 指定 Dashboard 指定讀取,不能操作,如重新執行、再次加入排程與刪除任務等 + IsReadOnlyFunc = (DashboardContext context) => true, + // 指定 Back to site 的連結 + AppPath = "/swagger", +}, new SQLiteStorage("HangfireExample2.db")); +``` + +## Background Methods + +排程可以直接執行特定方法,Hangfire 會將方法(可使用非同步)、類型與參數序列化後保存到資料庫,Hangfire 依照排程類型,分為以下四種 + +* Fire-and-Forget jobs: 將任務丟入執行佇列,直接執行 + +``` +BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-Forget")); +``` + +* Delayed jobs: 延遲指定時間後,將任務丟入執行佇列 + +``` +BackgroundJob.Schedule(() => Console.WriteLine("Delayed"), TimeSpan.FromDays(1)); +``` + +* Recurring jobs: 依照指定間隔,將任務丟入執行佇列 + +``` +RecurringJob.AddOrUpdate("job_id", () => Console.Write("Recurring By CRON"), Cron.Daily); + +RecurringJob.AddOrUpdate("job_id", () => Console.Write("Recurring By CRON expressions"), "0 12 * */2"); +``` + +移除已存在的排程任務 + +``` +RecurringJob.RemoveIfExists("job_id"); +``` + +手動觸發已存在的排程任務 + +``` +RecurringJob.Trigger("job_id"); +``` + + +* Continuations: 指定的任務完成後,才丟入執行佇列 + +``` +var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-Forget")); + +BackgroundJob.ContinueJobWith(jobid, () => Console.WriteLine("Continuations")); ``` \ No newline at end of file