Отложить очередь на работу с Gearman
Я хочу выделить некоторые трудоемкие вещи в очередь. Для этого я нашел Gearman наиболее используемым, но не знаю, подходит ли это мне. Одна из задач, которую мы хотим выполнить, - это отправка сообщений по очереди и предоставление функции, позволяющей отменить отправку почты в течение 1 минуты. Так что он не должен работать на работе сразу, а выполнить ее сейчас + 1 минута. Таким образом, я могу отменить задание до этого, и оно никогда не будет отправлено.
Есть ли способ сделать это?
Он будет работать на Debian. И должен быть применим от php. Единственное, что я нашел до сих пор, это запланировал работу в Gearman на конкретную дату и время, но это работает на что-то не очень распространенное:(
1 ответ
Ваш вопрос состоит из двух частей: (1) планирование в будущем и (2) возможность отменить работу до этого времени.
Для (1) at
должно работать просто отлично, как указано в этом вопросе, и парень даже разместил свой код оболочки. Ты это пробовал?
Если вы не хотите использовать это, рассмотрите этот сценарий:
- вставьте запись электронной почты для электронной почты, которая будет отправлена в базу данных, включая столбец "timeSent", который вы установите в течение 1 минуты в будущем.
- иметь одного работника-механика (я объясню почему), чтобы посмотреть в базе данных электронные письма, которые не были отправлены (например, некоторые
status
столбец = 0) и гдеtimeSent
уже прошло, и отправь те.
Таким образом, для (2), если вы хотите отменить письмо до его отправки, просто обновите его status
колонка к чему-то еще.
Ваш рабочий должен быть одним, потому что если у вас их несколько, они могут получить и попытаться отправить одну и ту же запись электронной почты. Если вам нужно многократное использование, убедитесь, что тот, который получает запись электронной почты, сначала блокирует ее непосредственно перед любыми трудоемкими операциями, такими как отправка по электронной почте (скажем, путем обновления status
колонка на что то другое).