运行 IHostedService 仅在一个横向扩展的 Azure 应用服务实例上

Run IHostedService on only one instance of a scaled out Azure App Service

是否可以 运行 IHostedService 仅在 ASP.NET Core 中的一个横向扩展 Azure 应用服务实例上?或者解决方案是 运行 这个 IHostedService 在它自己的应用程序服务中用一个实例吗?

我有一个 BackgroundService,每天 运行 发送一次报告,并通过电子邮件发送报告。当我的应用服务扩展到 2 个实例时,此服务将 运行 每天同时两次,导致发送两封相同的电子邮件。

我该如何解决这个问题?

最好将事物分解成单独的应用程序,这里也是如此。如果您只需要托管服务的一个实例,您应该将它分解成一个单独的项目并部署其中的一个实例。如果您将它部署在您的应用程序中,那么您的应用程序的每个实例都会有一个实例;没办法,参考这个 .

对于托管服务,对于您网站的每个部署,都有一个该托管服务的实例 运行,如果您只想要该“进程”的一个实例 运行,这可能是一个问题随时。您可以通过创建自己的锁定机制来解决这个问题,但显然 webjobs 开箱即用。所以你可以使用webjob运行作为单例来实现你想要的。请参阅有关 Hosted Services In ASP.NET Core.

的文章