• .netcore worker service (辅助角色服务) 的上手入门,包含linux和windows服务部署


    worker service (辅助角色服务)

    环境

    • vs2019
    • .netcore3.0

    操作

    • 新建一个项目 如下图
      在这里插入图片描述

    • 添加nuget

      • Microsoft.Extensions.Hosting.WindowsServices(windows平台下的服务)
      • Microsoft.Extensions.Hosting.Systemd(linux平台下的服务)
        根据自己需要选择添加,也可以都添加(我的都添加了,在程序里面判断了平台)
    • 判断平台注入服务

     public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args)
            {
            	//是否是windows平台
                bool isWinPlantform = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
                Console.WriteLine($"Window Plantform:{isWinPlantform}");
                if (isWinPlantform)
                    return Host.CreateDefaultBuilder(args)
                        .UseSystemd()//使用linux服务
                        .ConfigureServices((hostContext, services) =>
                        {
                            services.AddHostedService<Worker>();
                        });
                return Host.CreateDefaultBuilder(args)
                    .UseWindowsService()//使用windows服务
                    .ConfigureServices((hostContext, services) =>
                    {
                        services.AddHostedService<Worker>();
                    });
            }
        }
    

    简要介绍

    Program 类
    包含了程序入库 main函数。在函数内注入了Worker服务
    在2.x版本中没有worker服务,可以在asp.net的startup中注入服务

    Worker类
    继承BackgroundService类,重写ExecuteAsync方法即可(2.x版本中也是这样实现的

     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);
                }
            }
        }
    

    创建服务并且运行

    windows平台

    1. 然后使用sc.exe工具来管理服务,输入一下命令创建为windows服务
      sc.exe create DemoWorkService binPath=C:WorkerPubWorkerService1.exe
      DemoWorkService 服务名称
      C:WorkerPubWorkerService1.exe 生成的运行文件
    2. 查看服务状态使用一下命令
      sc.exe query DemoWorkService
    3. 启动命令
      sc.exe start DemoWorkService

    linux平台

    1. 将运行文件设置权限 777
    2. 创建服务
    # 进入目录
    cd /lib/systemd/system
    
    # 创建文件
    sudo tocuh myServices.service
    
    #编辑文件
    sudo nano myServices.service
    
    

    文件内容

    [Unit]
    Description=myServices
    After=network-online.target
     
    [Service]
    Type=simple
    User=root
    #工作路径(根据你的需要填写)
    WorkingDirectory=/home/pi/api
    #启动程序
    ExecStart=/home/pi/api/WorkerService
    Restart=always
     
    [Install]
    WantedBy=multi-user.target
    
    1. 创建服务
      systemctl enable myServices
    2. 启动服务
      systemctl start myServices

    [完]

  • 相关阅读:
    敏捷 咨询师 火星人陈勇博客牛人
    fpa 功能点分析法
    cto职责
    lexus
    c
    zz
    百度效率云
    zz
    产品研发体系中的需求承接与输出
    ESAPI学习笔记
  • 原文地址:https://www.cnblogs.com/xiaoch/p/13417927.html
Copyright © 2020-2023  润新知