Запланируйте работу в Gearman на конкретную дату и время - PullRequest
6 голосов
/ 23 августа 2010

Из того, что я вижу, Gearman не поддерживает запланированные или отложенные задания. Я думал, что, возможно, запланированное задание можно сначала поставить в очередь в at, а затем добавить в очередь Gearman после истечения периода at.

at задачи являются постоянными, поскольку они записываются в виде файлов в каталог в каталоге спула сервера. Таким образом, единственным узким местом может быть простой сценарий для добавления задачи в очередь Gearman, поскольку at не может быть распределен по серверам. Передача его в Gearman для обработки фактической работы означает, что я могу получить надлежащую регистрацию работы и т. Д.

Это лучший способ подойти к этому, и у вас есть альтернативные идеи?

Причина, по которой я выбрал Gearman вместо других решений для очереди, заключается в том, что он имеет расширение PHP.

Код, который я пишу, используется для поддержания очереди электронных писем, которые необходимо отправить. Поэтому я могу указать, что я хочу отправить электронное письмо по адресу example@example.org в пятницу, например, в 9.50.

Ответы [ 3 ]

2 голосов
/ 01 сентября 2010

Я решил пойти по маршруту at, как изначально изложено в моем вопросе.Для этого я написал небольшую PHP-оболочку для двоичного файла at и протестировал ее в Ubuntu.Если вы заинтересованы, его можно найти на github: http://github.com/treffynnon/PHP-at-Job-Queue-Wrapper

1 голос
/ 25 января 2011

Довольно хакерское решение, которое будет работать только при почасовом или ежедневном разрешении, состоит в том, чтобы имя задания (функции) содержало дату, в которую вы хотели его отправить. Затем попросите рабочих, начинающих работу в cron, каждый час или день регистрироваться на эти рабочие места.

Например, если вы хотите отправить электронное письмо в понедельник, 12 марта 2012 года, в 9:00, добавьте в очередь задание с именем, например email_2012-03-12_09: 00 . Затем запустите ежечасное задание cron, которое запускает работника, который регистрируется на любые задания, соответствующие email_ + текущая дата и час.

Как я уже сказал, возможно работоспособный, но довольно хакерский!

ОБНОВЛЕНИЕ 1: Недавно я увидел, что документы для постоянства базы данных gearmand теперь упоминают поле с именем when_to_run , которое является INT и потенциально может содержать метку времени эпохи Unix. На это поле пока не ссылаются в коде.

0 голосов
/ 23 июля 2014

Если вы используете Zend ...

SlmQueue - уровень абстракции очереди заданий.Это позволяет вам легко использовать системы очередей заданий в приложении Zend Framework 2.Таким образом, это не заставляет вас специально использовать один тип очереди заданий.Вы можете написать свой код и задания независимо от базовой системы.Это обеспечивает большую гибкость и развязку систем.

https://github.com/juriansluiman/SlmQueue

...