iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >.NET中Worker Service的使用方法
  • 536
分享到

.NET中Worker Service的使用方法

2023-06-15 01:06:54 536人浏览 薄情痞子
摘要

这篇文章主要介绍了.net中Worker Service的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。请先完成以下准备工作,以便于您理解本文。1、下载并安装最新的

这篇文章主要介绍了.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的使用方法”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: .NET中Worker Service的使用方法

本文链接: https://www.lsjlt.com/news/276670.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .NET中Worker Service的使用方法
    这篇文章主要介绍了.NET中Worker Service的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。请先完成以下准备工作,以便于您理解本文。1、下载并安装最新的 ...
    99+
    2023-06-15
  • .NET 中Worker Service的使用入门
    目录什么是 .NET Core Worker Service?§Worker Service 的一些例子Worker Service 模板提供了什么?§1. Program.cs§2...
    99+
    2024-04-02
  • 详解.NET Core中的Worker Service
    目录Worker Service项目程序和后台服务Worker Service 中使用Logging运行Worker Service当你想到ASP.NET Core时,可能会想到We...
    99+
    2024-04-02
  • .NET Core使用Worker Service创建服务
    需求来源 在几年前, 做的项目是依赖Windows服务来支撑一些业务, 目前已经把技术栈全部由.NET Framework 升级至 .NET Core x。 旧得需求大部分是,接入一...
    99+
    2024-04-02
  • NET Core中的Worker Service是什么/怎么用
    本篇内容主要讲解“NET Core中的Worker Service是什么/怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“NET Core中的Worker Service是什么/怎么用”吧!...
    99+
    2023-06-09
  • .NET Core如何使用Worker Service创建服务
    这篇文章主要介绍了.NET Core如何使用Worker Service创建服务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。需求来源在几年前, 做的项目...
    99+
    2023-06-29
  • .NET Core中使用gRPC的方法
    目录1.什么是gRPC1.基本介绍2.proto文件3.上手实践2.gRPC流1.服务端流、客户端流、双向流2.NetCore Web项目作为客户端3.gRPC AOP拦截1.什么是...
    99+
    2024-04-02
  • NET中ExecuteReader方法怎么使用
    在.NET中,使用ExecuteReader方法来执行SQL查询并返回一个DataReader对象,可以使用以下步骤:1. 创建一个...
    99+
    2023-09-26
    NET
  • laravel中的Service Container的概念及使用方法
    这篇文章主要讲解了“laravel中的Service Container的概念及使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“laravel中的Service Container的概...
    99+
    2023-06-20
  • .Net Core下使用Dapper的方法
    目录一、前言二、Dapper环境搭建三、Dapper封装定义DapperDBContext类异步分页构建(PageAsync)定义工作单元与事务定义数据仓储数据库连接四、Dapper...
    99+
    2024-04-02
  • HTML5中如何使用Worker
    这篇文章将为大家详细讲解有关HTML5中如何使用Worker,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Web Worker是HTML5提供的一个javascript多线程解决方案,我们可以将一些大计算...
    99+
    2023-06-09
  • .Net Api 中使用Elasticsearch存储文档的方法
    目录什么是Elasticsearch用Nest使用Es数据库配置Nest操作数据库新增什么是Elasticsearch Elasticsearch 是一个分布式、高扩展、高实时的搜索...
    99+
    2024-04-02
  • java的main方法中调用spring的service方式
    目录main方法调用spring的servicemain方法调用spring的dao service方法main方法调用spring的service 将业务层类配置到Spring中:...
    99+
    2024-04-02
  • 如何在SpringBoot中使用main方法注入service
    如何在SpringBoot中使用main方法注入service?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、SpringBoot中的main方法注入service在spri...
    99+
    2023-06-15
  • Worker类怎么在java 中使用
    本篇文章为大家展示了Worker类怎么在java 中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和...
    99+
    2023-06-14
  • 在.NET 6中使用日志组件log4net的方法
    本文将简单介绍在.NET 6中使用log4net的方法,具体见下文范例。 1.首先新建一个ASP.NET Core空项目 2.通过Nuget包管理器安装下面两个包 log4net...
    99+
    2024-04-02
  • 如何使用Java调用C# Web Service方法
    这篇文章主要介绍“如何使用Java调用C# Web Service方法”,在日常操作中,相信很多人在如何使用Java调用C# Web Service方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用J...
    99+
    2023-06-18
  • SpringBoot中的main方法注入service
    一、SpringBoot中的main方法注入service 在springboot中使用main方法常规无法注入service,因为以后也可能会有这种情况,所以采取工具类的方式进行,...
    99+
    2024-04-02
  • web worker在项目中怎么使用
    这篇文章主要介绍“web worker在项目中怎么使用”,在日常操作中,相信很多人在web worker在项目中怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web wo...
    99+
    2023-07-02
  • 关于同一个service调用service本身的方法
    目录同一个service调用service本身解决方案service的两种调用方法一、startService开启服务二、bindService绑定服务三、两种方法的区别同一个ser...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作