Запланируйте работу в Gearman на конкретную дату и время
Из того, что я вижу, Gearman не поддерживает запланированные или отложенные задания. Я думал, что, возможно, запланированная работа может быть поставлена в очередь в at
сначала, а затем добавляется в очередь Gearman после at
срок истек.
at
Задачи являются постоянными, поскольку они записываются в виде файлов в каталог в каталоге спула сервера. Таким образом, единственной бутылочной горловиной потенциально может быть простой скрипт для добавления задачи в очередь Gearman, потому что at
не может быть распределен по серверам. Передача его в Gearman для обработки фактической работы означает, что я могу получить надлежащую регистрацию работы и т. Д.
Это лучший способ подойти к этому, и у вас есть альтернативные идеи?
Причина, по которой я выбрал Gearman вместо других решений для очередей, заключается в том, что он имеет расширение PHP.
Код, который я пишу, используется для поддержки очереди электронных писем, которые необходимо отправить. Поэтому я могу указать, что я хочу отправить электронное письмо по адресу example@example.org в пятницу, например, в 9.50.
3 ответа
Я решил пойти 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, которое запускает работника, который регистрируется на любые задания, соответствующие email_ + текущая дата и час.
Как я уже сказал, возможно работоспособен, но довольно хакерский!
ОБНОВЛЕНИЕ 1: Недавно я увидел, что в документах по сохранению базы данных gearmand теперь упоминается поле с именем when_to_run, которое является INT и может потенциально содержать метку времени эпохи Unix. На это поле пока не ссылаются в коде.
Если вы используете Zend...
SlmQueue - уровень абстракции очереди заданий. Это позволяет вам легко использовать системы очередей заданий в приложении Zend Framework 2. Таким образом, это не обязывает вас специально использовать один тип очереди заданий. Вы можете написать свой код и задания независимо от базовой системы. Это обеспечивает большую гибкость и развязку систем.