摘要:在这篇文章中,我们将介绍如何使用 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 应用与现代的容器技术结合起来,为跨平台的应用部署提供了有力支持。希望这篇文章对你有所帮助!
来源:阿橘的小九九