91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET中Worker Service的使用方法

發布時間:2021-05-14 09:27:44 來源:億速云 閱讀:228 作者:小新 欄目:開發技術

這篇文章主要介紹了.NET中Worker Service的使用方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

請先完成以下準備工作,以便于您理解本文。
1、下載并安裝最新的 .NET SDK:https://dotnet.microsoft.com/download
2、命令行運行 dotnet new Worker -n "MyService" 命令,創建一個 Worker Service 項目。

什么是 .NET Core Worker Service?

Worker Service 是使用模板構建的 .NET 項目,該模板提供了一些有用的功能,可以將常規控制臺應用程序變得更加強大。Worker Service 運行于宿主(Host)的概念之上,宿主維護應用程序的生命周期。宿主還提供了一些常見的特性,如依賴注入、日志記錄和配置。

Worker Service 通常是長時間運行的服務,執行一些規律發生的工作負載。

§Worker Service 的一些例子

  • 處理來自隊列、服務總線或事件流的消息、事件

  • 響應對象、文件存儲中的文件更改

  • 聚合數據存儲中的數據

  • 豐富數據提取管道中的數據

  • AI/ML 數據集的格式化和清理

還可以開發一個這樣的 Worker Service,該服務從頭到尾執行一個過程,然后關閉。結合調度程序,便可以支持定期的批處理工作負載。例如,調度程序每隔一小時啟動一次服務,完成一些匯總數據的計算,然后關閉。

Worker Service 沒有用戶界面,也不支持直接的用戶交互,它們特別適用于設計微服務架構。在微服務體系結構中,職責通常被劃分為不同的、可單獨部署的、可伸縮的服務。隨著微服務架構的成長和發展,擁有大量的 Worker Service 會變得越來越常見。

Worker Service 模板提供了什么?

完全可以在不使用 Worker Service 模板的情況下開發長時間運行的 Worker Service。在 .NET Core 的早期版本中我是這樣做的,使用依賴注入容器手動建立宿主,然后啟動我的處理工作負載。

在默認情況下,Worker Service 模板包含了有用的基礎組件,比如依賴注入,這樣我們就可以集中精力在其上構建業務邏輯。它包含了一個管理應用程序生命周期的宿主。

Worker Service 模板本身是相當基礎的,它只包含了三個開箱即用的核心文件。

§1. Program.cs

第一個是 Program 類。該類包含 .NET 控制臺應用程序所必需的 Main 方法入口點,.NET 運行時期望在啟動 .NET 應用程序時在 Program 類中查找此方法。

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            });
}

在 Program 類中,作為 Worker Service 模板一部分的是 CreateHostBuilder 方法,該方法創建一個 IHostBuilder。IHostBuilder 接口定義了一個類型,該類型使用生成器模式生成 IHost 的實例。此模板通過調用 Host 類中的靜態 CreateDefaultBuilder 方法來創建一個新的 HostBuilder。

然后,它使用生成器來配置 IHost,該 IHost 被用于運行 Worker Service 應用程序。宿主提供了依賴注入容器和日志記錄等功能,就像我們可以在 ASP.NET Core 應用程序中使用的那樣。事實上,從 .NET Core 3.0 開始,ASP.NET Core Web 應用程序和 .NET Core Worker Service 都運行在同一 IHost 上的。

默認情況下,它包含了一個服務注冊,稍后我會在本文中介紹,暫時不用擔心。

從 Main 方法中調用 CreateDefaultBuilder 方法,將構建并立即運行宿主。當 .NET 運行時調用 Main 方法時,應用程序啟動,宿主將保持運行,監聽標準的關閉信號(例如按下 CTRL+C 鍵)。

§2. appsettings.json

如果您以前使用過 ASP.NET Core,將會非常熟悉 appsettings.json 文件,它是應用程序配置的常見來源之一。宿主被設計為,當啟動應用程序時,使用任意已注冊的配置提供程序從多個來源加載應用程序配置。其中一種提供程序是從 appsettings.json 加載配置,該文件內容由 JSON 組成,其結構包含表示應用程序配置的鍵和值。這些值可以隨意地定義在對相關配置按邏輯分組成的片段(Sections)內。

在 Worker Service 中,啟動時會檢查相同的配置源(包括此 appsettings.json 文件和環境變量),并從不同的源構建最終的配置。默認情況下會加載多種默認的提供程序,因此也會加載多種源。如果需要,您也可以自定義宿主用來加載配置數據的提供程序。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

模板中的默認 appsettings 文件中包含日志記錄庫的配置設置項,默認對 Worker Service 可用。這里的配置是為某些日志記錄上下文設置記錄級別的。

§3. Worker.cs

Worker 是一個您在默認的 ASP.NET Core 項目模板中見不到的新類。它是托管服務與宿主相結合的魔力所在,提供了 Worker Service 的基礎。

讓我們來看一下它的代碼:

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
}

此類從 BackgroundService 抽象基類派生。BackgroundService 類實現了一個名為 IHostedService 的接口。

BackgroundService 包含一個名為 ExecuteAsync 的抽象方法,我們必須在子類中重寫該方法,就像 Worker Service 模板中提供的 Worker 類中所做的那樣。ExecuteAsync 方法返回一個 Task,在 BackgroundService 內部,期望此 Task 是一些長時間運行的工作負載。該 Task 會被啟動并在后臺運行。

在內部,宿主將啟動 IHostedService 的所有注冊實現(包括從 BackgroundService 抽象類派生的類型)。請記住,BackgroundService 為我們實現了 IHostedService。

§4. 如何注冊托管服務(IHostedService)?

下一個顯而易見的問題是,如何注冊 IHostedService ?如果我們返回到 Program.cs 的代碼,我們將會找到答案:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureServices((hostContext, services) =>
        {
            services.AddHostedService<Worker>();
        });

在 ConfigureServices 方法中,可以向依賴注入容器注冊類型。AddHostedService 是為 IServiceCollection 定義的一個擴展方法,它允許我們注冊一個實現了 IHostedService 的類。

該模板中已將 Worker 類注冊為托管服務。

在啟動時,宿主將找到已注冊的 IHostedService 的所有實例,并按順序啟動它們,此時,它們的長時間運行的工作負載會作為后臺任務來運行。

為什么要構建 .NET Core Worker Service?

簡單的答案是——何時以及是否需要它們!如果您需要開發一個微服務,它沒有用戶界面,并執行長時間運行的工作,那么 Worker Service 很可能是一個好的選擇。

請記住,Worker Service 的底層只是一個控制臺應用程序。該控制臺應用程序使用宿主將應用程序轉換為運行的服務,直到收到停止的信號。宿主帶來了您可能已經熟悉的一些特性,比如依賴關系注入。使用和 ASP.NET Core 中可用的相同的日志記錄和配置擴展,使得開發可記錄日志信息且需要一些配置的 Worker Service 變得相當輕松。當構建運行在云上的 Worker Service 時,幾乎總會存在這種需求。例如,您可能需要為與您的 Worker Service 相交互的任何外部服務提供配置(比如一個隊列 URL)。

Worker Service 可用于從現有的 ASP.NET Core 應用程序提取職責,設計新的基于 .NET Core 的微服務。

總結

在本文中,我介紹了 Worker Service 項目模板,以及它的一些潛在用例。我們探索了使用 Worker Service 模板創建的新項目中所包含的三個默認文件。

§Worker Service 模板包含哪些文件?

  • Program.cs:控制臺應用程序的入口點,創建并運行宿主以管理應用程序生命周期并生成一個長期運行的服務。

  • appsettings.json:一個提供應用程序配置值的 JSON 文件。

  • Worker.cs:派生自 BackgroundService 基類,用于定義作為后臺任務執行的長時間運行的工作負載。

§Worker Service 是什么?

  • 不需要用戶交互的應用程序。

  • 使用宿主來維護控制臺應用程序的生命周期,直到宿主收到關閉的信號。將控制臺應用程序轉換為長時間運行的服務。

  • 包含和 ASP.NET Core 相同的功能,如依賴注入、日志記錄和配置。

  • 執行定期和長時間運行的工作負載。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“.NET中Worker Service的使用方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

图片| 类乌齐县| 灵寿县| 嘉禾县| 绩溪县| 恩施市| 抚顺县| 东乡| 双桥区| 信宜市| 马鞍山市| 方山县| 南溪县| 花垣县| 阿拉尔市| 齐河县| 湟中县| 岱山县| 华坪县| 梅河口市| 孝感市| 台东市| 资讯| 丰城市| 吉水县| 永定县| 巩义市| 齐齐哈尔市| 桓台县| 卓资县| 盐亭县| 平邑县| 徐水县| 长阳| 沂源县| 镇赉县| 商丘市| 西盟| 苍梧县| 永寿县| 吉林省|