Отложите очередь на работу с Gearman - PullRequest
0 голосов
/ 13 ноября 2010

Я хочу выделить некоторые трудоемкие вещи в очередь.Для этого я нашел Gearman наиболее используемым, но не знаю, подходит ли это мне.Одна из задач, которую мы хотим выполнить, - это отправка электронной почты по очереди и предоставление функции, позволяющей отменить отправку почты в течение 1 минуты.Таким образом, он не должен работать на работе сразу, а выполнить ее сейчас + 1 минута.Таким образом, я могу отменить задание до этого, и оно никогда не будет отправлено.

Есть ли способ сделать это?

Это будет работать на Debian.И должен быть применим от php.Единственное, что я нашел до сих пор, это Запланируйте работу в Gearman на конкретную дату и время , но это работает на чем-то не очень распространенном: (

1 Ответ

0 голосов
/ 13 ноября 2010

Ваш вопрос состоит из двух частей: (1) планирование в будущем и (2) возможность отмены задания до этого времени.

Для (1) at должно работать так же хорошо, как иуказан в этом вопросе, и парень даже разместил свой код обертки.Ты это пробовал?

Если вы не хотите использовать это, рассмотрите следующий сценарий:

  • вставьте запись электронной почты для сообщения электронной почты, которое будет отправлено в базу данных, включая «timeSent»столбец, который вы установите в будущем на 1 минуту.
  • у одного работника-шестерёнка (я объясню, почему он один), посмотрите в базе данных электронные письма, которые не были отправлены (например, некоторые status column = 0)) и куда timeSent уже прошел, и отправьте их.

Итак, для (2), если вы хотите отменить электронное письмо до его отправки, просто обновите его столбец status на что-то другое.

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

...