自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇文章帶你了解Hangfire

開發(fā) 后端
Hangfire 適用于大多數(shù) .NET 平臺(tái):.NET Framework 4.5 或更高版本、.NET Core 1.0 或更高版本,或任何與 .NET Standard 1.3 兼容的平臺(tái)。

 [[408195]]

本文轉(zhuǎn)載自微信公眾號(hào)「后端Q」,作者conan。轉(zhuǎn)載本文請(qǐng)聯(lián)系后端Q公眾號(hào)。

要求

Hangfire 適用于大多數(shù) .NET 平臺(tái):.NET Framework 4.5 或更高版本、.NET Core 1.0 或更高版本,或任何與 .NET Standard 1.3 兼容的平臺(tái)。您可以將它與幾乎任何應(yīng)用程序框架集成,包括 ASP.NET、ASP.NET Core、控制臺(tái)應(yīng)用程序、Windows 服務(wù)、WCF,以及社區(qū)驅(qū)動(dòng)的框架,如 Nancy 或 ServiceStack。

存儲(chǔ)

存儲(chǔ)是 Hangfire 保存與后臺(tái)作業(yè)處理相關(guān)的所有信息的地方。類型、方法名稱、參數(shù)等所有細(xì)節(jié)都被序列化并放入存儲(chǔ)中,沒(méi)有數(shù)據(jù)保存在進(jìn)程的內(nèi)存中。存儲(chǔ)子系統(tǒng)在 Hangfire 中被很好地抽象出來(lái),可以為 RDBMS 和 NoSQL 解決方案實(shí)現(xiàn)。

這是您必須做出的主要決定,也是開始使用框架之前所需的唯一配置。以下示例顯示如何使用 SQL Server 數(shù)據(jù)庫(kù)配置 Hangfire。請(qǐng)注意,連接字符串可能會(huì)有所不同,具體取決于您的環(huán)境。

  1. GlobalConfiguration.Configuration 
  2.     .UseSqlServerStorage(@"Server=.\SQLEXPRESS; Database=Hangfire.Sample; Integrated Security=True"); 

客戶端

Client 負(fù)責(zé)創(chuàng)建后臺(tái)作業(yè)并將它們保存到 Storage 中。后臺(tái)作業(yè)是一個(gè)應(yīng)該在當(dāng)前執(zhí)行上下文之外執(zhí)行的工作單元,例如在后臺(tái)線程、其他進(jìn)程中,甚至在不同的服務(wù)器上——這一切都可以通過(guò) Hangfire 實(shí)現(xiàn),即使沒(méi)有額外的配置。

  1. BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!")); 

請(qǐng)注意,這不是委托,而是表達(dá)式樹。Hangfire 不是立即調(diào)用該方法,而是序列化類型 ( System.Console)、方法名稱 ( WriteLine,帶有所有參數(shù)類型以便稍后識(shí)別它) 和所有給定的參數(shù),并將其放入 Storage。

服務(wù)器

Hangfire Server 通過(guò)查詢存儲(chǔ)來(lái)處理后臺(tái)作業(yè)。粗略地說(shuō),它是一組后臺(tái)線程,它們偵聽(tīng) Storage 以獲取新的后臺(tái)作業(yè),并通過(guò)反序列化類型、方法和參數(shù)來(lái)執(zhí)行它們。

您可以將此后臺(tái)作業(yè)服務(wù)器放置在您想要的任何進(jìn)程中,包括像 ASP.NET 這樣的危險(xiǎn)進(jìn)程——即使您終止了一個(gè)進(jìn)程,您的后臺(tái)作業(yè)也會(huì)在重新啟動(dòng)后自動(dòng)重試。因此,在 Web 應(yīng)用程序的基本配置中,您不再需要使用 Windows 服務(wù)進(jìn)行后臺(tái)處理。

  1. using (new BackgroundJobServer()) 
  2.     Console.ReadLine(); 

安裝

Hangfire 作為幾個(gè) NuGet 包分發(fā),從主要的 Hangfire.Core 開始,它包含所有主要類和抽象。其他包如 Hangfire.SqlServer 提供功能或抽象實(shí)現(xiàn)。要開始使用 Hangfire,請(qǐng)安裝主軟件包并選擇可用的存儲(chǔ)空間之一。

Visual Studio 2017 發(fā)布后,出現(xiàn)了一種全新的 NuGet 包安裝方式。所以我放棄了列出安裝 NuGet 包的所有方法,并回退到使用該dotnet應(yīng)用程序幾乎在任何地方都可用的方法。

  1. dotnet add package Hangfire.Core 
  2. dotnet add package Hangfire.SqlServer 

配置

使用GlobalConfiguration類執(zhí)行配置。它的Configuration屬性提供了很多擴(kuò)展方法,既有來(lái)自 Hangfire.Core 的,也有來(lái)自其他包的。如果你安裝了一個(gè)新的包,不要猶豫,檢查是否有新的擴(kuò)展方法。

  1. GlobalConfiguration.Configuration 
  2.     .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) 
  3.     .UseSimpleAssemblyNameTypeSerializer() 
  4.     .UseRecommendedSerializerSettings() 
  5.     .UseSqlServerStorage("Database=Hangfire.Sample; Integrated Security=True;", new SqlServerStorageOptions 
  6.     { 
  7.         CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), 
  8.         SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), 
  9.         QueuePollInterval = TimeSpan.Zero, 
  10.         UseRecommendedIsolationLevel = true
  11.         UsePageLocksOnDequeue = true
  12.         DisableGlobalLocks = true 
  13.     }) 
  14.     .UseBatches() 
  15.     .UsePerformanceCounters(); 
  16.      

方法調(diào)用可以鏈接起來(lái),因此不需要一次又一次地使用類名。全局配置是為了簡(jiǎn)單起見(jiàn),幾乎每個(gè) Hangfire 類都允許您指定存儲(chǔ)、過(guò)濾器等的覆蓋。在 ASP.NET Core 環(huán)境中,全局配置類隱藏在AddHangfire方法中。

用法

以下是所有運(yùn)行中的 Hangfire 組件,作為打印“Hello, world!”的完整工作示例。來(lái)自后臺(tái)線程的消息。您可以注釋與服務(wù)器相關(guān)的行,并多次運(yùn)行該程序——只要您再次取消注釋這些行,就會(huì)處理所有后臺(tái)作業(yè)。

  1. using System; 
  2. using Hangfire; 
  3. using Hangfire.SqlServer; 
  4.  
  5. namespace ConsoleApplication2 
  6.     class Program 
  7.     { 
  8.         static void Main() 
  9.         { 
  10.             GlobalConfiguration.Configuration 
  11.                 .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) 
  12.                 .UseColouredConsoleLogProvider() 
  13.                 .UseSimpleAssemblyNameTypeSerializer() 
  14.                 .UseRecommendedSerializerSettings() 
  15.                 .UseSqlServerStorage("Database=Hangfire.Sample; Integrated Security=True;", new SqlServerStorageOptions 
  16.                 { 
  17.                     CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), 
  18.                     SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), 
  19.                     QueuePollInterval = TimeSpan.Zero, 
  20.                     UseRecommendedIsolationLevel = true
  21.                     UsePageLocksOnDequeue = true
  22.                     DisableGlobalLocks = true 
  23.                 }); 
  24.  
  25.             BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!")); 
  26.  
  27.             using (var server = new BackgroundJobServer()) 
  28.             { 
  29.                 Console.ReadLine(); 
  30.             } 
  31.         } 
  32.     } 

 

 

責(zé)任編輯:武曉燕 來(lái)源: 后端Q
相關(guān)推薦

2023-05-12 08:19:12

Netty程序框架

2020-11-10 10:48:10

JavaScript屬性對(duì)象

2021-01-29 18:41:16

JavaScript函數(shù)語(yǔ)法

2021-02-02 18:39:05

JavaScript

2021-06-04 09:56:01

JavaScript 前端switch

2023-07-30 15:18:54

JavaScript屬性

2023-05-08 08:21:15

JavaNIO編程

2020-12-08 08:09:49

SVG圖標(biāo)Web

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結(jié)構(gòu)前端

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2021-06-24 09:05:08

JavaScript日期前端

2021-09-27 09:18:30

ListIterato接口方法

2023-09-06 14:57:46

JavaScript編程語(yǔ)言

2024-01-30 13:47:45

2024-04-19 14:23:52

SwitchJavaScript開發(fā)

2021-03-05 18:04:15

JavaScript循環(huán)代碼

2021-05-18 08:30:42

JavaScript 前端JavaScript時(shí)

2021-02-26 20:01:57

SVG濾鏡元素

2021-03-24 10:00:32

Python遞歸函數(shù)Python基礎(chǔ)

2023-08-27 15:18:17

JavaScriptRegExp
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)