如何确保在 .NET core 2.2 Web API 中只有一个 IHostedService 实例 运行
How to ensure only one instance of IHostedService is running within a .NET core 2.2 Web API
我有一个 .NET Core 2.2 web API,可以根据需要扩展到多个实例。此 API 有一个后台服务 (IHostedService),一次只能 运行 在一个实例上。
是否有通用的方法或设计模式来确保此服务在任何给定时间点仅运行在一个实例上运行?
将托管服务与实际应用程序包括在一起的能力就像 Core 中的其他任何东西一样。例如,如果需要,您可以在同一个项目中使用所有 MVC、API 和 Razor Pages。然而,在某个时候,最好将事物分解成单独的应用程序,这里也是如此。如果您只想要托管服务的一个实例,则应将其分解为一个单独的项目并部署其中的一个实例。如果您将它部署在您的应用程序中,那么您的应用程序的每个实例都会有一个实例;没有办法解决这个问题。
FWIW,如果您可以跳转,ASP.NET Core 3.0 现在有一个工作人员服务模板可以很好地满足要求。您无需升级即可自行部署托管服务,但这会让您的生活更轻松。您也可以只为那个项目使用 3.0;仅仅因为你在一件事上使用 3.0,并不意味着每个项目都必须升级。
我有一个 .NET Core 2.2 web API,可以根据需要扩展到多个实例。此 API 有一个后台服务 (IHostedService),一次只能 运行 在一个实例上。
是否有通用的方法或设计模式来确保此服务在任何给定时间点仅运行在一个实例上运行?
将托管服务与实际应用程序包括在一起的能力就像 Core 中的其他任何东西一样。例如,如果需要,您可以在同一个项目中使用所有 MVC、API 和 Razor Pages。然而,在某个时候,最好将事物分解成单独的应用程序,这里也是如此。如果您只想要托管服务的一个实例,则应将其分解为一个单独的项目并部署其中的一个实例。如果您将它部署在您的应用程序中,那么您的应用程序的每个实例都会有一个实例;没有办法解决这个问题。
FWIW,如果您可以跳转,ASP.NET Core 3.0 现在有一个工作人员服务模板可以很好地满足要求。您无需升级即可自行部署托管服务,但这会让您的生活更轻松。您也可以只为那个项目使用 3.0;仅仅因为你在一件事上使用 3.0,并不意味着每个项目都必须升级。