模板中的默认 appsettings 文件中包含日志记录库的配置设置项,默认对 Worker Service 可用。这里的配置是为某些日志记录上下文设置记录级别的。
§3. Worker.csWorker 是一个您在默认的 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的使用入门的详细内容,更多关于.NET 中Worker Service的使用的资料请关注脚本之家其它相关文章!
您可能感兴趣的文章: