在 Centos上部署 C# 开发的Worker Service服务

摘要:在这篇文章中,我们将介绍如何使用 C# 创建一个简单的 Worker Service 应用程序,并在 Centos上进行部署。Worker Service 是 .NET Core 提供的一个新模板,用于创建长期运行的后台服务应用程序。它特别适合用来处理各种后台

在这篇文章中,我们将介绍如何使用 C# 创建一个简单的 Worker Service 应用程序,并在 Centos上进行部署。Worker Service 是 .NET Core 提供的一个新模板,用于创建长期运行的后台服务应用程序。它特别适合用来处理各种后台任务,例如消息队列处理、日志处理等。

首先,我们使用 Vs2022创建一个新的 Worker Service 项目。

我们启动Docker

打开 Worker.cs 文件,你会看到一个初始的 Worker 类。我们将这个类修改为一个简单的时间记录器,每隔一秒钟记录一次当前时间。

首先,打开 Worker.cs 文件:

using System;using System.Threading;using System.Threading.Tasks;using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Logging;namespace MyWorkerService{public class Worker : BackgroundService{private readonly ILogger _logger;public Worker(ILogger 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); // 每隔1秒钟记录一次时间}}}}

在本地运行你的 Worker Service,确保它能够正常工作。

我这里安装Windows Docker Desktop

你应该会在控制台中看到 Worker Service 每隔一秒钟输出一次当前时间。

在项目根目录创建一个 Dockerfile,用于容器化我们的应用。内容如下:

# 使用微软提供的官方 .NET Core SDK 镜像FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS baseWORKDIR /appFROM mcr.microsoft.com/dotnet/sdk:6.0 AS buildWORKDIR /srcCOPY ["MyWorkerService.csproj", "."]RUN dotnet restore "./MyWorkerService.csproj"COPY . .WORKDIR "/src/"RUN dotnet build "MyWorkerService.csproj" -c Release -o /app/buildFROM build AS publishRUN dotnet publish "MyWorkerService.csproj" -c Release -o /app/publishFROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "MyWorkerService.dll"]

打开命令提示符或 PowerShell。

导航到包含 Dockerfile 的项目目录的上一层目录,这里很重要,我的Dockerfile 在MyWorkerService目录下

docker build -f .\MyWorkerService\Dockerfile -t myworkservice .

在我的windows docker desktop 中可以管理这个镜像了。

安装.net6 sdk

sudo yum install -y dotnet-sdk-6.0

运行服务

dotnet MyWorkerService.dll

在 CentOS 上后台运行 .NET Worker Service 可以使用系统的 Systemd 服务管理器来达成。这将允许你的服务自动启动、停止和重启,并在系统启动时自动运行。

创建一个新的 Systemd 服务文件来管理你的 Worker Service。

sudo nano /etc/systemd/system/myworkerservice.service

将以下内容粘贴到服务文件中:

[Unit]Description=My .NET Worker Service[Service]WorkingDirectory=/var/MyWorkerServiceExecStart=/usr/bin/dotnet /var/MyWorkerService/MyWorkerService.dllRestart=always# Restart service after 10 seconds if the dotnet service crashesRestartSec=10KillSignal=SIGINTSyslogIdentifier=dotnet-exampleUser=your-usernameEnvironment=DOTNET_PRINT_TELEMETRY_MESSAGE=false[Install]WantedBy=multi-user.target

请根据实际情况调整以下参数:

WorkingDirectory: 你的应用程序的发布目录。ExecStart: 执行应用程序的命令。User: 运行服务的用户。

保存并关闭文件(在 nano 中按 CTRL+O 保存,然后按 CTRL+X 退出编辑器)。

现在可以启动并配置你的 Worker Service 在系统启动时自动运行:

sudo systemctl start myworkerservicesudo systemctl enable myworkerservice

使用以下命令检查服务状态:

sudo systemctl status myworkerservice

你应该会看到类似以下的输出表明服务正在运行:

● myworkerservice.service - My .NET Worker ServiceLoaded: loaded (/etc/systemd/system/myworkerservice.service; enabled; vendor preset: disabled)Active: active (running) since Thu 2021-10-07 14:47:38 UTC; 13min agoMain PID: 12345 (dotnet)CGroup: /system.slice/myworkerservice.service└─12345 /usr/bin/dotnet /var/MyWorkerService/MyWorkerService.dll管理服务# 启动服务sudo systemctl start myworkerservice# 停止服务sudo systemctl stop myworkerservice# 重启服务sudo systemctl restart myworkerservice# 查看服务状态sudo systemctl status myworkerservice

通过这篇文章,我们学习了如何使用 C# 创建一个简单的 Worker Service,并使用 Docker 将其容器化后部署到 Centos上。这一过程展示了如何将 .NET Core 应用与现代的容器技术结合起来,为跨平台的应用部署提供了有力支持。希望这篇文章对你有所帮助!

来源:阿橘的小九九

相关推荐