Cross-platform background service in .NET Core (think windows service/unix daemon)?
因此,我有一个由API和Windows服务(由Topshelfpackage)组成的应用程序,该应用程序使用RabbitMQ连续侦听事件并按需处理数据。
出于教育和娱乐的目的,我尝试将其重写为等效的设置,该设置将在.NET Core和unix上运行(例如,在AWS的docker容器中)
如果我想跨平台使用.NET Core来实现与Windows服务等效的东西(永远运行的后台进程),最好的方法是什么?
Windows服务本身就是一个控制台应用程序,符合Windows Service Control Manager的接口规则和协议。您可以使用.net核心控制台应用程序作为主机在两个平台上实现相同的功能,这需要做一些额外的配置才能使其表现得更像真实的服务/守护程序。
的Linux
例如对于Linux,您可以使用SystemD。
您首先需要使用以下内容创建一个SystemD配置文件:
1 2 3 4 5 6 7 8 9 10 11 | [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 |
然后配置SystemD以使其了解您的服务配置
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 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 |
视窗
对于Windows,您应该执行大多数相同的操作,但使用不同的工具集。您将必须使用第三方服务管理器来避免紧密的Windows绑定。
例如。您可以使用NSSM。这是带有相关示例的精美文章-.Net Core控制台应用程序作为Windows服务。
在Windows的情况下,您仍然可以将普通Windows服务设置用作主机。并为您的Unix环境编写另一个主机(控制台应用程序主机)。他们两个都可以共享业务逻辑,只有它们对系统事件做出反应的方式会有所不同。
希望有帮助。
请参阅Worker Services(.NET Core 3.x):
您可以从新的Visual Studio 2019 Worker Service项目模板创建一个模板,也可以使用.NET CLI创建一个模板:
另请参阅:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1