Выполнить одно время (правда) на Azure - PullRequest
2 голосов
/ 07 августа 2020

Я новичок в Azure, и мне нужно DoSomeWork () в Azure. Этот DoSomeWork () должен запускаться периодически, примерно каждые N минут. Однако DoSomeWork () не может выполняться дважды одновременно. Другими словами, любое выполнение DoSomeWork () не может начаться до завершения предыдущего выполнения DoSomeWork ().

Я просмотрел Azure веб-заданий, особенно непрерывных Azure веб-заданий. Это похоже на go, но неясно, как начать, особенно с начальным кодом, который вы получаете в VS:

static void Main()
{
    var config = new JobHostConfiguration();

    if (config.IsDevelopment)
    {
        config.UseDevelopmentSettings();
    }

    var host = new JobHost(config);
    // The following code ensures that the WebJob will be running continuously
    host.RunAndBlock();
}

Существует также класс Functions, который принимает входной параметр, украшенный QueueTrigger , но я не хочу, чтобы код запускался каким-либо сообщением очереди или около того.

Как я могу получить простую Console.WriteLine ("hello world"), работающую, например, каждую минуту, но без наложения? Если Azure Web Jobs не является способом go, что мне следует использовать вместо этого (должно быть Azure -based)?

Ответы [ 2 ]

2 голосов
/ 10 августа 2020

Как упоминалось в комментарии, azure веб-задание поддерживает TimerTrigger feature (запланированное веб-задание), которое может запускаться каждые xxx минут в соответствии с вашими потребностями.

Это довольно просто при использовании azure веб-задания. Например, в Visual Studio просто создайте консольный проект -> Добавьте эту строку кода: Console.WriteLine("hello world") -> затем соберите проект -> затем заархивируйте все необходимые файлы, включая .exe, в файл .zip -> наконец, загрузите файл .zip в свое веб-задание и установите расписание (например, выполняйте код каждые 5 минут).

Пожалуйста, обратитесь к this do c для получения более подробной информации около creating a scheduled WebJob.

Вы также можете рассмотреть возможность использования других azure служб, которые поддерживают функцию timerTrigger, например azure function .

1 голос
/ 10 августа 2020

WebJobs может быть сложно настроить и поддерживать. Особенно при работе с конвейером CI / CD. У меня есть несколько запущенных прямо сейчас, и я собираюсь переместить их в одно из следующих более надежных и обслуживаемых решений:

Мы настраиваем запланированные работы с помощью функции Azure, которая выполняется по расписанию CRON . Он очень надежен и долговечен, так как управляется Azure. Вы просто настроили его, выбросили свой код, а остальное - до Azure, чтобы убедиться, что он срабатывает, когда вы его настроили.

Если вы хотите сделать это в своем собственном приложении, возьмите посмотрите, как работает фоновая служба в ASP. NET Core приложении. Вы можете запустить таймер в фоновой службе, который отключится и выполнит некоторую работу. Имейте в виду, что если ваше приложение масштабируется по горизонтали, вы будете запускать два таймера, что, вероятно, не подходит в вашей ситуации.

Вы можете сделать что-нибудь необычное, например, настроить функцию Azure для достижения конечной точки. на вашем WebAPI в назначенное время. Затем вы можете отправить работу на BackgroundService, который является одноэлементным, чтобы вы могли заблокировать второй запрос, если вы в данный момент выполняете свою работу.

Мы склонны использовать go последний маршрут. Azure запускает таймер, функция выполняется, отправляет сообщение в конечную точку, конечная точка выполняет работу в фоновом режиме.

Есть множество опций, помимо того, что я упомянул, но это единственные Я имел честь быть архитектором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...