2010-08-23 2 views
6

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

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

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

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

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

+6

Это потому, что нас немцы, мы делаем нашу работу * сразу *. Нам не нужно планировать. –

+1

Очень смешно! Кажется, все вопросы Gearman риферизируются таким образом. – Treffynnon

+2

@Treffynnon да, они приглашают это ... Они слишком часто ставятся правильно («Как остановить работника-редуктора», «убить рабочих-комбайн с одной командой» ....) :) –

ответ

2

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

1

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

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

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

UPDATE 1: Я недавно видел, что документы для gearmand database persistence Теперь уже поля с именем when_to_run который является INT, и потенциально могут провести эпохальную метку времени Unix. Это поле, похоже, пока не указано в коде.

0

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

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

https://github.com/juriansluiman/SlmQueue

Смежные вопросы