val*_*orl 31 unix daemon cross-platform .net-core
所以我有一个应用程序,它由API和Windows服务(由Topshelf包装)组成,它使用RabbitMQ持续监听事件并按需处理数据.
对于教育和娱乐,我试图将其重写为可在.NET Core和unix上运行的等效设置(例如,在AWS上的docker容器中)
如果我想保持跨平台的话,使用.NET Core实现等效于Windows服务(永远运行的后台进程)的最佳方法是什么?
n.y*_*nko 17
Windows服务本身是一个控制台应用程序,它符合Windows服务控制管理器的接口规则和协议.您可以使用.net核心控制台应用程序作为主机在两个平台上实现相同的功能.它需要进行一些额外的配置,使其更像真实的服务/守护程序.
例如,对于Linux,您可以使用SystemD.您需要首先使用以下内容创建SystemD配置文件:
[Unit]
Description=daemon service
After=network.target
[Service]
ExecStart=/usr/bin/dotnet $(pwd)/bin/daemonsrv.dll 10000
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
Run Code Online (Sandbox Code Playgroud)
然后配置SystemD以使其了解您的服务配置
# Copy service file to a System location
sudo cp daemonsrv.service /lib/systemd/system
# Reload SystemD and enable the service, so it will restart on reboots
sudo systemctl daemon-reload
sudo systemctl enable daemonsrv
# Start service
sudo systemctl start daemonsrv
# View service status
systemctl status daemonsrv
Run Code Online (Sandbox Code Playgroud)
对于Windows,您应该大多使用相同的工具集.您将不得不使用第三方服务管理器来避免紧密的Windows绑定.例如,您可以使用NSSM.这里有一篇很好的文章,里面有关于它的例子 - 作为Windows服务的.Net Core控制台应用程序.
顺便说一下,在Windows的情况下,你仍然可以使用普通的Windows服务设置作为主机.并为您的Unix环境(控制台应用程序主机)编写另一台主机.它们都可以共享业务逻辑,只有它们对系统事件的反应方式才会不同.
希望能帮助到你.
小智 6
请参阅工作人员服务 (.NET Core 3.x):
您可以从新的 Visual Studio 2019 Worker Service 项目模板或使用 .NET CLI 创建一个:
dotnet new worker
另请参阅: https: //learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services? view=aspnetcore-3.1&tabs=visual-studio
| 归档时间: |
|
| 查看次数: |
7885 次 |
| 最近记录: |