Quartz.Net - задержать запуск простого триггера - PullRequest
4 голосов
/ 18 августа 2010

У меня есть несколько заданий, настроенных в Quartz для запуска с заданными интервалами.Однако проблема заключается в том, что при запуске службы она пытается запустить все задания одновременно ... Есть ли способ добавить задержку для каждого задания, используя конфигурацию .xml?

Вот 2 примера триггера задания:

 <simple>
    <name>ProductSaleInTrigger</name>
    <group>Jobs</group>
    <description>Triggers the ProductSaleIn job</description>
    <misfire-instruction>SmartPolicy</misfire-instruction>
    <volatile>false</volatile>
    <job-name>ProductSaleIn</job-name>
    <job-group>Jobs</job-group>
    <repeat-count>RepeatIndefinitely</repeat-count>
    <repeat-interval>86400000</repeat-interval>        
  </simple>

 <simple>
    <name>CustomersOutTrigger</name>
    <group>Jobs</group>
    <description>Triggers the CustomersOut job</description>
    <misfire-instruction>SmartPolicy</misfire-instruction>
    <volatile>false</volatile>
    <job-name>CustomersOut</job-name>
    <job-group>Jobs</job-group>
    <repeat-count>RepeatIndefinitely</repeat-count>
    <repeat-interval>43200000</repeat-interval> 
  </simple>

Как видите, есть два триггера, первый повторяется каждый день, следующий повторяется два раза в день.

Моя проблема в том, что я хочу, чтобы первая или вторая работа выполняласьначать через несколько минут после другого ... (потому что они оба в конце обращаются к одному API, и я не хочу перегружать запрос)

Существует ли свойство repeat-delay или priority?Я не могу найти никаких документов, говорящих об этом ..

Ответы [ 3 ]

4 голосов
/ 23 июня 2011

Я знаю, что вы делаете это через XML, но в коде вы можете установить StartTimeUtc для задержки, скажем, на 30 секунд, как это ...

trigger.StartTimeUtc = DateTime.UtcNow.AddSeconds(30);
0 голосов
/ 19 мая 2016

Это не совсем идеальный ответ для вашего XML-файла - но с помощью кода вы можете использовать метод расширения StartAt при создании триггера.

/* calculate the next time you want your job to run - in this case top of the next hour */
var hourFromNow = DateTime.UtcNow.AddHours(1);
var topOfNextHour = new DateTime(hourFromNow.Year, hourFromNow.Month, hourFromNow.Day, hourFromNow.Hour, 0, 0);

/* build your trigger and call 'StartAt' */
TriggerBuilder.Create().WithIdentity("Delayed Job").WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever()).StartAt(new DateTimeOffset(topOfNextHour))
0 голосов
/ 09 февраля 2011

Вы, наверное, уже видели это к настоящему времени, но есть возможность объединить задания, хотя это не поддерживается "из коробки".

http://quartznet.sourceforge.net/faq.html#howtochainjobs

...