【问题标题】:Run IHostedService on only one instance of a scaled out Azure App Service仅在一个横向扩展的 Azure 应用服务实例上运行 IHostedService
【发布时间】:2020-01-22 16:14:43
【问题描述】:

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

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

我该如何解决这个问题?

【问题讨论】:

  • 我将使用 Timer 计划运行将发送电子邮件代码托管到 Azure Functions 中。

标签: asp.net-core azure-web-app-service autoscaling asp.net-core-hosted-services


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 2020-02-24
    • 2017-09-28
    • 2021-10-13
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多