Непоследовательное поведение Quartz.NET с одновременными пропусками зажигания - PullRequest
0 голосов
/ 05 октября 2018

Я опробовал функциональность DisallowConcurrentExecution в Quartz.NET, но обнаружил, что она ведет себя немного странно.

Допустим, у меня задание Quartz.NET запланировано запускать каждую 1 минуту.Затем он спит в течение 90 секунд и заканчивается.Атрибут [DisallowConcurrentExecution] гарантирует, что все, кроме первых выполнений, будут давать сбой.

Я хочу, чтобы, как только планировщик освободился (в 1:30), выполнялось следующее задание, и когдаодин заканчивается (через 3 минуты), следующий стартует и так далее.Вместо этого я нахожу следующее:

enter image description here

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

После небольшого прочтения я подумал, что это была «умная политика», стандартная техника обработки пропусков зажигания.Я попытался установить конкретные, но они не достигли того, что я сказал выше.Даже WithMisfireHandlingInstructionNowWithRemainingCount() не работал (см. Скриншот), который в соответствии с документами для Java-версии должен

перепланировать "сейчас" (...) с повторениемсчетчик установлен на то, что было бы, если бы он не пропустил ни одного выстрела.

Итак, я что-то упускаю, другой вариант или предостережение, или это ошибка на конце Кварца?Если последнее, есть ли обходной путь?

1 Ответ

0 голосов
/ 26 ноября 2018

Оказывается, что полная минута простоя была обусловлена ​​свойством misfireThreshold, которое по умолчанию составляет 60 секунд.Я установлю его, например, на 5 секунд, как показано ниже:

NameValueCollection properties = new NameValueCollection
{
    ["quartz.jobStore.misfireThreshold"] = "5000"
};

Я не уверен, почему порог пропуска зажигания должен был бы задерживать повторные попытки в этом случае, поскольку через несколько минут все больше и больше пропускаетсяказни, которые уже ждали более 60 секунд.Это, вероятно, можно считать ошибкой.К счастью, решение этой конкретной проблемы достаточно простое.

...