Hangfire是一款后臺開發框架,如果您需要設計后臺任務就可以使用這款框架快速編輯各種任務內容,您可以快速部署后臺工作的任務,可以部署長期監控的任務,可以部署短期運行的任務,可以設置各種任務循環執行,使用框架內容就可以創建新的任務,可以直接復制代碼到當前的任務中使用,支持在指定的CRON
計劃中多次觸發重復作業,支持后臺進程長期運行,可以在應用程序的整個生命周期內連續運行后臺進程,每種任務的運行方式都可以直接在軟件上添加控制方案,任務執行的數據可以在軟件顯示統計內容,可以在圖表查看進程運行情況,運行成功、失敗、隊列任務等內容都可以在后臺監控。
Hangfire 是一個開源框架,可幫助您創建、處理和管理后臺作業,即您不想放入請求處理管道的操作:
群發通知/通訊;
從 xml、csv、json 批量導入;
創建檔案;
發射網絡鉤子;
刪除用戶;
構建不同的圖表;
圖像/視頻處理;
清除臨時文件;
定期自動報告;
數據庫維護。
多種類型的后臺作業
Hangfire 支持多種后臺任務——短期和長期運行、CPU 密集型和 I/O 密集型、一次性和循環。您無需重新發明輪子——它已準備好使用。
隨時隨地處理作業
默認情況下,作業處理是在 ASP.NET 應用程序中進行的。但是您可以在控制臺應用程序、Windows 服務或其他任何地方處理作業
以持久存儲為后盾
后臺作業是應用程序中非常重要的一部分,Hangfire 確保任何作業至少執行一次。為了在應用程序重新啟動之間保留后臺作業信息,所有信息都保存在您最喜歡的持久存儲中。目前官方支持以下存儲:
Redis
In-Memory (preview)
存儲子系統被抽象到足以支持 RDBMS 和 NoSQL 解決方案。如果您最喜歡的事務數據庫系統尚不支持,則可以將其支持作為擴展來實現。
自動重試
如果您的方法遇到暫時性異常,請不要擔心——它會在幾秒鐘內自動重試。如果所有重試嘗試都用盡,您可以從集成的 Web 界面手動重新啟動它。
如果您的后臺作業在執行過程中遇到問題,它會在延遲一段時間后自動重試。Hangfire 成功處理了以下問題:
例外
應用程序關閉
意外的進程終止
您還可以通過編程代碼或儀表板 UI 手動重試任何后臺作業
隨著您的成長而擴展
您無需做出任何架構決定即可開始使用 Hangfire。您可以從簡單的設置開始,在 Web 應用程序端實現后臺處理。
之后,當你遇到性能問題時,你可以在不同的進程或服務器之間分離處理——Hangfire 使用分布式鎖來處理同步問題。
集成監控界面
Hangfire 附帶了一個很棒的工具——Web Monitoring UI。它作為 OWIN 擴展實現,可以托管在任何應用程序中——ASP.NET、控制臺或 Windows 服務。監控 UI 允許您查看和控制后臺作業處理的任何方面,包括統計信息、異常和后臺作業歷史記錄。
只要看看下面的截圖,你就會愛上它!
SQL Server 和 Redis 支持
Hangfire 使用持久存儲來存儲作業、隊列和統計信息,并讓它們在應用程序重新啟動后仍然存在。存儲子系統被抽象到足以支持經典 SQL Server 和快速 Redis。
SQL Server 提供簡化的安裝以及常規維護計劃。
Redis 提供了驚人的速度,尤其是與 SQL Server 相比,但需要額外的知識。
保證處理
Hangfire 是在知道托管環境可以殺死每行上的所有線程的情況下制作的。因此,它在成功完成之前不會刪除作業,并且包含不同的隱式重試邏輯以在其處理中止時執行該作業。
日志記錄
Hangfire 使用 Common.Logging 庫來記錄它的所有事件。它是一個通用庫,您可以使用適配器將其插入您的日志框架。
多個 Hangfire 實例
您可以在相同或不同的機器上運行多個 Hangfire 實例。它使用分布式鎖定來防止競爭條件。每個 Hangfire 實例都是冗余的,您可以無縫地添加或刪除實例(但控制它們偵聽的隊列)。
多隊列處理
Hangfire 可以處理多個隊列。如果您想優先處理您的工作或在您的服務器之間拆分處理(一些處理存檔隊列,其他處理圖像隊列等),您可以告訴 Hangfire 您的決定。
Hangfire.Pro.Redis
Hangfire Pro 附帶Hangfire.Pro.Redis使用Redis服務器來持久化后臺作業和其他數據的軟件包。
Redis 以其出色的性能而聞名,這里是 Hangfire.SqlServer 和 Hangfire.Redis 存儲之間的相對比較結果。
Hangfire.Pro.PerformanceCounters
Hangfire.Pro.PerformanceCounters軟件包允許 Hangfire 將其內部指標發布到 Windows 性能計數器——這是監控 Windows 應用程序和服務的標準方法。
因此,您可以使用Nagios、New Relic、Server Density等現有工具來主動監控服務的運行狀況。
基于隊列的處理
與其同步調用一個方法,不如將它放在一個持久隊列上,Hangfire 工作線程將接受它并在自己的執行上下文中執行:
BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));
此方法在存儲中創建一個作業并立即將控制權返回給調用者。Hangfire 保證即使宿主進程異常終止后也會調用指定的方法。
延遲方法調用
您可以將其執行推遲指定時間,而不是立即調用方法:
BackgroundJob.Schedule(() => Console.WriteLine("Hello, world!"), TimeSpan.FromMinutes(5));
此調用還保存作業,但不是將其放入隊列,而是將作業添加到持久計劃中。當給定時間過去后,作業將被添加到其隊列中。同時,您可以重新啟動您的應用程序——它無論如何都會被執行。
重復任務
重復性工作處理從未如此簡單。您只需要一行代碼:
RecurringJob.AddOrUpdate("easyjob", () => Console.Write("Easy!"), Cron.Daily);
Hangfire 使用Cronos庫來執行調度任務,因此您可以使用更復雜的 CRON 表達式:
RecurringJob.AddOrUpdate("powerfuljob", () => Console.Write("Powerful!"), "0 12 * */2");
網友評論