新聞中心
Hangfire是一個開源且商業(yè)免費使用的工具函數(shù)庫。可以讓你非常容易地在ASP.NET應(yīng)用(也可以不在ASP.NET應(yīng)用)中執(zhí)行多種類型的后臺任務(wù),而無需自行定制開發(fā)和管理基于Windows Service后臺任務(wù)執(zhí)行器。且任務(wù)信息可以被持久保存。內(nèi)置提供集成化的控制臺。

汝南網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
要求
Hangfire 適用于大多數(shù) .NET 平臺:.NET Framework 4.5 或更高版本、.NET Core 1.0 或更高版本,或任何與 .NET Standard 1.3 兼容的平臺。您可以將它與幾乎任何應(yīng)用程序框架集成,包括 ASP.NET、ASP.NET Core、控制臺應(yīng)用程序、Windows 服務(wù)、WCF,以及社區(qū)驅(qū)動的框架,如 Nancy 或 ServiceStack。
存儲
存儲是 Hangfire 保存與后臺作業(yè)處理相關(guān)的所有信息的地方。類型、方法名稱、參數(shù)等所有細節(jié)都被序列化并放入存儲中,沒有數(shù)據(jù)保存在進程的內(nèi)存中。存儲子系統(tǒng)在 Hangfire 中被很好地抽象出來,可以為 RDBMS 和 NoSQL 解決方案實現(xiàn)。
這是您必須做出的主要決定,也是開始使用框架之前所需的唯一配置。以下示例顯示如何使用 SQL Server 數(shù)據(jù)庫配置 Hangfire。請注意,連接字符串可能會有所不同,具體取決于您的環(huán)境。
GlobalConfiguration.Configuration
.UseSqlServerStorage(@"Server=.\SQLEXPRESS; Database=Hangfire.Sample; Integrated Security=True");
客戶端
Client 負責(zé)創(chuàng)建后臺作業(yè)并將它們保存到 Storage 中。后臺作業(yè)是一個應(yīng)該在當(dāng)前執(zhí)行上下文之外執(zhí)行的工作單元,例如在后臺線程、其他進程中,甚至在不同的服務(wù)器上——這一切都可以通過 Hangfire 實現(xiàn),即使沒有額外的配置。
BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));
請注意,這不是委托,而是表達式樹。Hangfire 不是立即調(diào)用該方法,而是序列化類型 ( System.Console)、方法名稱 ( WriteLine,帶有所有參數(shù)類型以便稍后識別它) 和所有給定的參數(shù),并將其放入 Storage。
服務(wù)器
Hangfire Server 通過查詢存儲來處理后臺作業(yè)。粗略地說,它是一組后臺線程,它們偵聽 Storage 以獲取新的后臺作業(yè),并通過反序列化類型、方法和參數(shù)來執(zhí)行它們。
您可以將此后臺作業(yè)服務(wù)器放置在您想要的任何進程中,包括像 ASP.NET 這樣的危險進程——即使您終止了一個進程,您的后臺作業(yè)也會在重新啟動后自動重試。因此,在 Web 應(yīng)用程序的基本配置中,您不再需要使用 Windows 服務(wù)進行后臺處理。
using (new BackgroundJobServer())
{
Console.ReadLine();
}
安裝
Hangfire 作為幾個 NuGet 包分發(fā),從主要的 Hangfire.Core 開始,它包含所有主要類和抽象。其他包如 Hangfire.SqlServer 提供功能或抽象實現(xiàn)。要開始使用 Hangfire,請安裝主軟件包并選擇可用的存儲空間之一。
Visual Studio 2017 發(fā)布后,出現(xiàn)了一種全新的 NuGet 包安裝方式。所以我放棄了列出安裝 NuGet 包的所有方法,并回退到使用該dotnet應(yīng)用程序幾乎在任何地方都可用的方法。
dotnet add package Hangfire.Core
dotnet add package Hangfire.SqlServer
配置
使用GlobalConfiguration類執(zhí)行配置。它的Configuration屬性提供了很多擴展方法,既有來自 Hangfire.Core 的,也有來自其他包的。如果你安裝了一個新的包,不要猶豫,檢查是否有新的擴展方法。
GlobalConfiguration.Configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage("Database=Hangfire.Sample; Integrated Security=True;", new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
UsePageLocksOnDequeue = true,
DisableGlobalLocks = true
})
.UseBatches()
.UsePerformanceCounters();
方法調(diào)用可以鏈接起來,因此不需要一次又一次地使用類名。全局配置是為了簡單起見,幾乎每個 Hangfire 類都允許您指定存儲、過濾器等的覆蓋。在 ASP.NET Core 環(huán)境中,全局配置類隱藏在AddHangfire方法中。
用法
以下是所有運行中的 Hangfire 組件,作為打印“Hello, world!”的完整工作示例。來自后臺線程的消息。您可以注釋與服務(wù)器相關(guān)的行,并多次運行該程序——只要您再次取消注釋這些行,就會處理所有后臺作業(yè)。
using System;
using Hangfire;
using Hangfire.SqlServer;
namespace ConsoleApplication2
{
class Program
{
static void Main()
{
GlobalConfiguration.Configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseColouredConsoleLogProvider()
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage("Database=Hangfire.Sample; Integrated Security=True;", new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
UsePageLocksOnDequeue = true,
DisableGlobalLocks = true
});
BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));
using (var server = new BackgroundJobServer())
{
Console.ReadLine();
}
}
}
}
文章標(biāo)題:快速上手Hangfire
瀏覽地址:http://fisionsoft.com.cn/article/dpedehd.html


咨詢
建站咨詢
