Hangfire Pro 2022-08-31 update
Hangfire Pro 是一組擴展包,可提高性能并簡化大型應用程序中后臺作業處理的維護。Hangfire Pro 軟件包可通過付費訂閱獲得。購買后,您會收到二進制文件、對私有 NuGet 源的訪問權限以及 GitHub 上的私有存儲庫。
套餐
Hangfire.Pro
有限的存儲支持
請注意,僅當使用Hangfire.SqlServer、Hangfire.Pro.Redis或Hangfire.InMemory包作為作業存儲時,才正式支持 Hangfire.Pro 包。我們不能保證批次可以與其他存儲一起正常工作,因為處理保證在很大程度上取決于具體的存儲實現。
原子背景作業創建
批處理允許您以原子方式創建一堆后臺作業。這意味著,如果在創建后臺作業的過程中出現異常,則不會處理任何一個。假設您想向您的客戶發送 1000 封電子郵件,而他們確實希望收到這些電子郵件。這是舊方法:
for ( var i = 0; i < 1000; i++) {BackgroundJob .Enqueue(() => SendEmail(i));//遇到異常怎么辦? }但是,如果存儲變得不可用i == 500怎么辦?可能已經發送了 500 封電子郵件,因為工作線程會在它們創建后拾取并處理作業。如果您重新執行此代碼,您的一些客戶可能會收到煩人的重復代碼。因此,如果您想正確處理此問題,您應該編寫更多代碼來跟蹤發送了哪些電子郵件。
但這里有一個更簡單的方法:
需要配置
在使用批處理之前,請調用文檔GlobalConfiguration.Configuration.UseBatches中寫的方法。
批處理作業.StartNew (x => {for ( var i = 0; i < 1000; i++){x.Enqueue(() => SendEmail(i));} });如果出現異常,您可能會向用戶顯示錯誤,并在幾分鐘后要求重試她的操作。無需其他代碼!
鏈接批次
延續允許您將多個批次鏈接在一起。它們將在父批次的所有后臺作業完成后執行。考慮前面的示例,您有 1000 封電子郵件要發送。如果您想在發送后進行最終操作,只需添加一個延續:
var id1 = BatchJob .StartNew( /* for (var i = 0; i < 1000... */ );var id2 = BatchJob .ContinueBatchWith (id1, x => {x.Enqueue(() => MarkCampaignFinished());x.Enqueue(() => NotifyAdministrator()); });因此,批處理和批處理延續允許您定義工作流并配置將并行執行的操作。這對于繁重的計算方法非常有用,因為它們可以分布到不同的機器上。
復雜的工作流程
創建操作不會限制您僅在Enqueued狀態下創建作業。您可以安排作業稍后執行、添加延續、將延續添加到延續等。
var batchId = BatchJob .StartNew(x => {x.Enqueue(() => Console .Write ( "1a..." ));var id1 = x.Schedule(() => Console .Write ( "1b..." ), TimeSpan .FromSeconds(1));var id2 = x.ContinueJobWith(id1, () => Console .Write( "2..." ));x.ContinueJobWith (id2, () => Console.Write ( "3..." )); });BatchJob .ContinueBatchWith (batchId, x => {x.Enqueue(() => Console .WriteLine( "4..." )); });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 Pro 2022-08-31 update的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android私有数据存储,Androi
- 下一篇: C++Primer 第10章lambda