Запустите IHostedService только на одном экземпляре службы приложений с масштабированием Azure - PullRequest
2 голосов
/ 22 января 2020

Возможно ли запустить IHostedService только на одном экземпляре масштабированной Azure службы приложений в ASP. NET Core? Или было бы решение запустить этот IHostedService в своей собственной службе приложений с одним экземпляром?

У меня есть BackgroundService, который запускается один раз в день и отправляет отчеты по электронной почте. Эта служба будет работать два раза в день в то же время, когда моя Служба приложений будет масштабирована до 2 экземпляров, что приведет к отправке двух идентичных электронных писем.

Как решить эту проблему?

1 Ответ

2 голосов
/ 22 января 2020

Лучше разбить вещи на отдельные приложения, и здесь тоже так. Если вам нужен только один экземпляр вашей размещенной службы, вы должны разбить его на отдельный проект и развернуть один его экземпляр. Если вы развернете его внутри своего приложения, для каждого экземпляра будет экземпляр; нет никакого способа обойти это, см. этот поток .

В случае с размещенными службами существует экземпляр этой размещенной службы для каждого развертывания вашего веб-сайта, что может быть проблемой, если вы только хочу, чтобы один экземпляр этого «процесса» работал в любое время. Вы можете программировать вокруг этого, создавая свой собственный механизм блокировки, но, очевидно, webjobs получает это из коробки. Таким образом, вы можете использовать webjob, работающий как синглтон , чтобы достичь того, чего вы хотите. См. Статью о размещенных службах в ASP. NET Core .

...