首页 > 编程语言 >#yyds干货盘点#【愚公系列】2023年03月 ASP.NET Core下Worker Service构建系统服务实现任务调度

#yyds干货盘点#【愚公系列】2023年03月 ASP.NET Core下Worker Service构建系统服务实现任务调度

时间:2023-03-05 15:32:29浏览次数:50  
标签:yyds ASP Service Core Worker Program NET 任务调度 logger

前言

当你想到ASP.NET Core时,可能会想到Web应用程序后端代码,包括MVC和WebAPI。MVC视图和Razor页面还允许使用后端代码生成带有HTML元素的前端UI。全新的Blazor更进一步,允许使用WebAssembly在Web浏览器中运行客户端.NET代码。最后,我们现在有了一个Worker Service应用程序的模板。

这是在ASP.NET Core早期预览中引入的。虽然项目模板最初列在Web模板下,但此后在向导中重新定位了一个级别。这是在.NET Core中创建长时间运行的跨平台服务的好方法。

命令行创建如下

dotnet new worker -o myproject

一、ASP.NET Core Worker Service构建系统服务实现任务调度

1.安装对应包

使用vs2022创建Worker Service程序,nuget安装如下包:

Microsoft.Extensions.Hosting.WindowsServices

在这里插入图片描述

2.添加window服务扩展

在Program中添加UseWindowsService()

worker service 的默认实现包含了两个类:Program 和 Worker 类, Program 类的功能差不多是合成了 传统的 Asp.Net Core 上的 Program + Startup 两个类的功能,还有一个专门用于写业务逻辑的 Worker 类,下面是 Program 类的实现,可以着重看一下 AddHostedService 是如何使用的。

IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
    }).UseWindowsService()
    .Build();

await host.RunAsync();

在这里插入图片描述

实际任务执行代码Worker类

Work 类提供了对 依赖注入 的支持,它继承于 Microsost.Extensions.Hosting.Abstractions 命名空间下的 BackgroundService,这个抽象的 BackgroundService 类又实现了 IHostedService 接口,还可以看出这个抽象类定义了四个方法声明:StartAsync,StopAsync,ExecuteAsync,Dispose。

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)
        {
            //实际要执行的任务代码
            await Task.Delay(8640000, stoppingToken);
        }
    }
}

3.发布部署服务到windows

发布选择独立安装,win-64。不选这独立安装服务器需要有对应的.NET Core运行时 在这里插入图片描述

发布程序后在程序目录用cmd执行以下代码

sc.exe create 服务名称 binpath=xxxx.exe

二、Worker Service 日志功能

要想在 worker service 中记录日志,可以添加 Microsoft.Extensions.Logging 程序集,默认的 worker service 是 ConsoleLogger,也就是仅记录到 控制台 上,实际业务中不可能这么玩,如果想记录到其他地方该怎么做呢?比如 Windows Events 中,要这么做的话,可以使用 EventLog,在 nuget 上添加 Microsoft.Extensions.Logging.EventLog 包即可。

下面的代码片段展示了如何在 CreateHostBuilder 方法中进行配置将这个log记录到 event 中。

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

标签:yyds,ASP,Service,Core,Worker,Program,NET,任务调度,logger
From: https://blog.51cto.com/u_15437432/6101401

相关文章

  • #yyds干货盘点 【React工作记录七】如何对数组进行一个过滤操作map
     目录​​前言​​​​需求​​​​解决思路​​​​代码​​​​运行结果​​前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作......
  • #yyds干货盘点 【React工作记录五】如何处理数据格式字符串让它加上标签
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了......
  • Raspberry Pi GPIO入门指南
    如果您想使用RaspberryPi进行数字输入/输出操作,那么您需要使用GPIO(通用输入/输出)引脚。在这篇文章中,我们将为您提供RaspberryPiGPIO的基础知识,包括如何访问和操作......
  • #yyds干货盘点# LeetCode程序员面试金典:T9键盘
    题目:在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列,实现一个算法来返回匹配单词的列表。你会得到一......
  • #yyds干货盘点# LeetCode面试题:外观数列
    1.简述:给定一个正整数n,输出外观数列的第n项。「外观数列」是一个整数序列,从数字1开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符......
  • ASP.NET Core 中间件
    中间件是一种装配到应用管道以处理请求和响应的软件。每个组件:选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。使用 WebApplicati......
  • #yyds干货盘点#nginx正则表达式
    nginx正则匹配说明:细则:前缀匹配优先其中,最长匹配优先而后,按配置顺序匹配正则,正则第一个匹配到后终止无正则匹配,则用前面记住的前缀"="精确匹配,匹配后终止"~"区分大小写匹......
  • #yyds干货盘点#nginx的root 与 alias
    nginx指定文件路径有两种方式root和alias,主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。它们的使用方法和作......
  • #yyds干货盘点# LeetCode程序员面试金典:水域大小
    题目:你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接......
  • #yyds干货盘点# LeetCode面试题:解数独
    1.简述:编写一个程序,通过填充空格来解决数独问题。数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗......