.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" } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyggpz.html