Назад | Перейти на главную страницу

Альтернативные варианты для очереди заданий по расписанию?

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

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

Как лучше всего решить эту проблему? Есть ли такая очередь?

Пока мои альтернативы такой очереди:

  1. beanstalkd - поддерживает отложенные задания, я могу вычислить дельту между настоящим моментом и указанным временем.
    • неточно: что происходит при изменении часового пояса или действительно больших дельтах (месяцев)
  2. Команда "at" - создать задание, которое будет запускаться и помещать задание по расписанию в очередь в указанное время.
    • привязан к одной машине: что произойдет, если система перезагрузится? Как перенести задания на новый сервер? Единая точка отказа
    • вручную обработать истечение срока, если у вас длительный простой.
  3. delayed_job / custom polling - создайте демона (что-то вроде delayed_job), который непрерывно опрашивает базу данных запланированных заданий и вставляет в очередь в указанное время
    • кажется слишком сложным

Что-то вроде Планировщик заданий с открытым исходным кодом может быть уместным ...