После моего вчерашнего вопроса (Continuous WebJobs и CancellationToken) я подумал, что теперь я понимаю, как непрерывные веб-задания и плавное завершение работы, а также некоторые тесты.

Дополнительная информация

С https://myWebJob.scm.azurewebsites.net/api/continuouswebjobs я получаю:

{
    [some info ommited...]
    "type": "continuous",
    "error": null,
    "using_sdk": true,
    "settings": {
        "stopping_wait_time": 120
    }
}

В четверг, 31 декабря 2015 г., 07:00:23 по Гринвичу я остановил сервер, следующие записи на панели инструментов:


    [12/31/2015 07:00:23 > d71f29: SYS INFO] Status changed to Disabling
    [12/31/2015 07:00:28 > d71f29: SYS INFO] Detected WebJob file/s were updated, refreshing WebJob
    [12/31/2015 07:00:28 > d71f29: SYS INFO] Status changed to Stopping
    [12/31/2015 07:00:30 > d71f29: INFO] Job host stopped
    [12/31/2015 07:00:32 > d71f29: SYS INFO] Status changed to Success
    [12/31/2015 07:00:32 > d71f29: SYS INFO] Status changed to Stopped

И моя текущая работа сразу заканчивается без дополнительной информации. Последние две строки кода моей функции - это ведение журнала на приборной панели и запись записи в таблицу хранения. Ни одна из этих записей не записана ... Я пытался несколько раз, и каждый раз в течение 5 секунд хост задания останавливается. Так:

Вопрос

Правильно ли игнорируется значение "stopping_wait_time" для непрерывных веб-заданий?

1
Herr häck 31 Дек 2015 в 10:53

2 ответа

Вы совершенно правы. Значение параметра "stopping_wait_time" будет игнорироваться для непрерывных веб-заданий.

Для непрерывных веб-заданий Azure уведомит запущенный процесс веб-задания, когда он собирается его остановить, затем он будет ждать настраиваемое количество времени (которое по умолчанию составляет 5 секунд), после чего, если процесс не завершился незаметно, он закроет его.

Для инициированных веб-заданий (а не для непрерывных веб-заданий) уведомление о завершении работы отсутствует, но есть льготный период (30 секунд по умолчанию), когда веб-задание не будет принудительно немедленно завершено, льготный период можно настроить.

Полное объяснение здесь. http://blog.amitapple.com/post/2014 /05/webjobs-graceful-shutdown/#.VM9Su40tEic

Надеюсь, это поможет С уважением, Стефан

-1
stephgou 31 Дек 2015 в 10:25

ИЗМЕНИТЬ 19 марта 2019 г.

Этот параметр можно настроить в соответствии с документацией, задав значение stopping_wait_time в settings.job. Незаметно для себя метод JobSettings.GetStoppingWaitTime будет извлекать TimeSpan на основе этого параметра или значения по умолчанию 5 секунд, если оно не указано в настройках.

public TimeSpan GetStoppingWaitTime(long defaultTime)
{
    return TimeSpan.FromSeconds(GetSetting(JobSettingsKeys.StoppingWaitTime, defaultTime));
}

Моя ошибка, я не должен был вырезать и вставить. Я хотел сказать (если я правильно понимаю), что вы не можете настроить это время по умолчанию - если вы читаете его здесь https://github.com/projectkudu/kudu/wiki/Web-jobs не упоминается" настраиваемый ", и это то, что сейчас находится в коде сервиса Kudu, если вы его получите GitHub в файле ContinuousJobRunner.cs в Kudu.core.

5 - жестко заданное значение по умолчанию

public class ContinuousJobRunner : BaseJobRunner, IDisposable
{
    public const string WebsiteSCMAlwaysOnEnabledKey = "WEBSITE_SCM_ALWAYS_ON_ENABLED";
    private const int DefaultContinuousJobStoppingWaitTimeInSeconds = 5;

    private static readonly TimeSpan WarmupTimeSpan = TimeSpan.FromMinutes(2);

 ....

            _continuousJobLogger.ReportStatus(ContinuousJobStatus.Stopping);

            NotifyShutdownJob();

            // By default give the continuous job 5 seconds before killing it (after notifying the continuous job)
            if (!_continuousJobThread.Join(JobSettings.GetStoppingWaitTime(DefaultContinuousJobStoppingWaitTimeInSeconds)))
            {
                _continuousJobThread.Abort();
            }

            _continuousJobThread = null;

Надеюсь, это поможет С Новым годом, Стефан

0
Bo Rohlfsen 20 Мар 2019 в 00:28