Задать вопрос
@Nolan81
программист

Нужно ли самому контролировать, выполнилась ли задача в очереди?

Использую расширение - yiisoft/yii2-queue.
Драйвер планирую - Redis. На базе списка.
Возьмем такую задачу - регистрация пользователя, и необходимость отправить ему письмом email с кодом подтверждения почтового ящика.

Какой видится workflow, судя по тому расширению.

1) В модели пользователь заведу флаг isEmailSent (= 0 по умолчанию), того что письмо было отправлено
2) При создании модели (insert новой записи) отправляю в очередь задачу Отправки письма - Yii::$app->queue->push(new SendEmail(['to' => $email, ...])

Теперь по крону например, будут доставаться воркером эти задачи, и каждая задача:
3) отправляет письмо
4) делает пометку пользователю, что ему отправили (isEmailSent=1)

Получается, теперь, если вдруг редис упадет и вся его инфа пропадет, то
6) по крону, по задержке, еще смотрим этих людей с isEmailSent==0, чтоб можно было им повторить отправку этой задачи в очередь.

Так надо делать?
  • Вопрос задан
  • 112 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
А можешь ли ты сам контролировать успех завершения задачи ?
Что именно им является ? Какие последствия будут от повторного ( паралельного) запуска задачи по таймауту ?

Вот на вашем примере "послать письмо активации регистрации" ?

Ты ничего не можешь проверить сам ! А успех это визит пользователя по ссылке.
А повторные письма - это спам.

Так что можно только добавить в модель поля (статус задачи и время последнего смены статуса).
Новая / Передана исполнителю / Отправлена / Подтверждено

И уже пусть пользователь сам иницирует повторную отправку, а Вы не будете ему это давать делать, если
со смены статуса прошло меньше указанного времени.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы