Расписание работы в Gearman на определенную дату и время
Вопрос
От того, что я могу видеть, Gearman не поддерживает запланированные рабочие места или задержки заданий. Я думал, что, возможно, запланированная работа может быть очередна в at
сначала, а затем добавлен в очередь редукторов после at
Срок действия периода времени истек.
at
Задачи настойчивы, поскольку они записываются в качестве файлов в каталог в каталоге SPOAL из сервера. Таким образом, единственная шея бутылки потенциально будет простой скриптом, чтобы добавить задачу в очередь редукторов, потому что at
не может быть распространен по серверам. Передача его в Gearman для обработки фактической работы означает, что я могу получить правильную регистрацию рабочих мест и т. Д.
Это лучший способ подойти к этому и у вас есть альтернативные идеи?
Причина, по которой я решил редуктор по поводу других решений очередей, состоит в том, что у него есть расширение PHP.
Код, который я пишу, используется для поддержания очереди электронных писем, которые необходимо отправить. Поэтому я могу указать, что я хочу отправить электронную почту на example@example.org в 9.50 в пятницу, например.
Решение
Я решил пойти at
Маршрут как изначально выложен в моем вопросе. Для целей я написал маленькую обертку PHP для at
Бинарный и проверил его на Ubuntu. Если вы заинтересованы, это можно найти на GitHub: http://github.com/treffynnon/php-at-job-queue-wrapper
Другие советы
Дополнительно хаковое решение, которое будет хорошо работать только по часовой или ежедневной резолюции, будет заключаться в том, чтобы сделать имя задания (функции), содержат дату, в которой вы хотели отправить. Затем у рабочие, начиная с CRON каждый час или день, чтобы зарегистрироваться для этих рабочих мест.
Например, если вы хотите отправить электронное письмо в 9 утра в понедельник 12 марта 2012 года, добавьте работу в очередь с именем, такими как Email_2012-03-12_09: 00.. Отказ Затем прогуливайтесь на работу CRON, которая управляет рабочим, который регистрирует любые подходящие на работу Эл. адрес_ + текущая дата и час.
Как я уже говорю, наверное, работоспособный, но весьма хаки!
Обновление 1: Я недавно видел, что документы для Персистенция базы данных Gearmand Теперь упомяните поле имени когда_to_Run. который является А.Н. Int., и может потенциально удерживать метеографию EPOCH UNIX. Это поле, похоже, не ссылается в код.
Если вы используете Zend ...
SLMQUUE - это слой абстракции очереди очереди. Это позволяет легко использовать системы очереди заданий в приложении Zend Framework 2. Таким образом, это не заставляет вас специально использовать один тип очереди заданий. Вы можете написать свой код и работы независимо от базовой системы. Это обеспечивает большую гибкость и развязку систем.