Отложить очередь заданий с помощью Gearman

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

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

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


person Thomaschaaf    schedule 13.11.2010    source источник


Ответы (1)


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

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

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

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

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

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

person Fanis Hatzidakis    schedule 13.11.2010