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

ozz*_*ald 6 autoscaling azure-web-app-service asp.net-core asp.net-core-hosted-services

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

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

我怎么解决这个问题?

Joe*_*Cai 3

最好将事物分解为单独的应用程序,这里也是这种情况。如果您只需要托管服务的一个实例,则应将其分解为一个单独的项目并部署该项目的一个实例。如果您将其部署在应用程序中,则应用程序的每个实例都会有一个实例;没有办法解决这个问题,请参阅此线程

\n\n

使用托管服务,您网站的每次部署都会运行该托管服务的一个实例,如果您只想随时运行该 \xe2\x80\x9cprocess\xe2\x80\x9d 的一个实例,这可能会成为一个问题。您可以通过创建自己的锁定机制来解决这个问题,但显然 webjobs 可以开箱即用。所以你可以使用 webjob 作为单例运行来实现你想要的。请参阅有关ASP.NET Core 中的托管服务的文章。

\n