Из того, что я вижу, Gearman не поддерживает запланированные задания или отложенные задания. Я думал, что, возможно, запланированное задание может быть поставлено в очередь сначала, а затем добавлено в очередь Gearman после истечения периода времени.
at
выполнении задач сохраняются, поскольку они записываются как файлы в каталог в каталоге спула сервера. Таким образом, единственная бутылочная горловина потенциально может быть простым сценарием для добавления задачи в очередь Gearman, поскольку она at
может быть распределена между серверами. Передача его Gearman для обработки фактической работы означает, что я могу получить правильный журнал работы и т. Д.
Это лучший способ приблизиться к этому, и есть ли у вас альтернативные идеи?
Причина, по которой я выбрал Gearman над другими решениями очереди, заключается в том, что он имеет расширение PHP.
Код, который я пишу, используется для поддержания очереди сообщений электронной почты, которые необходимо отправить. Поэтому я могу указать, что я хочу отправить электронное письмо на example@example.org в 9.50 в пятницу, например.
Я решил пойти at
маршруту, как первоначально изложено в моем вопросе. Для этой цели я написал небольшую PHP-оболочку для двоичного кода и протестировал ее на Ubuntu. Если вас это интересует, его можно найти на github: http://github.com/treffynnon/PHP-at-Job-Queue-Wrapper
Довольно хакерское решение, которое будет работать только при ежечасном или ежедневном разрешении, заключалось бы в том, чтобы имя задания (функции) содержало дату, в которую вы хотели его отправить. Затем, чтобы каждый день или день регистрировались работники, начинающие в cron для регистрации на эти рабочие места.
Например, если вы хотите отправить электронное письмо в 9 утра в понедельник 12 марта 2012 года, добавьте задание в очередь с именем, таким как email_2012-03-12_09: 00 . Затем выполняйте рабочее задание cron, которое запускает рабочий, который регистрируется для любых заданий, соответствующих электронной почте + текущая дата и час.
Как я уже сказал, возможно, работоспособный, но довольно хакерский!
ОБНОВЛЕНИЕ 1: Недавно я увидел, что в документах для сохранения базы данных и базы данных теперь упоминается поле с именем when_to_run, которое является INT , и потенциально может содержать временную метку времени unix. Это поле, похоже, пока не указано в коде.
Если вы используете Zend …
SlmQueue – это уровень абстракции очереди заданий. Это позволяет вам легко использовать системы очереди заданий в приложении Zend Framework 2. Тем самым он не принуждает вас специально использовать один тип очереди заданий. Вы можете написать свой код и задания независимо от базовой системы. Это обеспечивает большую гибкость и развязку систем.