Насколько надежна задержка почты в Laravel? - PullRequest
0 голосов
/ 17 сентября 2018

Я хочу сообщить продавцу, что покупатель скоро приедет (примерно за 2 часа до времени доставки) по почте.

Я бы обычно делал это с помощью CRON и таблицы базы данных. Ежечасно проверяю, нашел ли я заказ с доставкой минус 2 часа, только после этого отправляю почту.

Теперь я хотел бы знать, порекомендуете ли вы использовать задания очереди для отправки писем.

С

$when = now()->addDays(10); //I would dynamically set the date

Mail::to($order->seller())
    ->later($when, new BuyerIsComing($order));

Я могу отложить доставку сообщения электронной почты из очереди.

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

Является ли система массового обслуживания Laravel достаточно жесткой, чтобы вести себя правильно после длительных задержек (т.е. 2 месяца)? ​​

Редактировать

Я использую Redis для очереди

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Вам на самом деле не о чем беспокоиться. Отправка почты обычно увеличивает время отклика вашего приложения, поэтому хорошо, что вы хотите отложить отправку.

Очереди - это путь, и его довольно легко настроить в Laravel. Laravel поддерживает пару из них из коробки. Я бы посоветовал вам начать с базы данных, а затем попробовать beanstalk и т.д.

Наконец, и, что более важно, используйте менеджер процессов, такой как Supervisor, для мониторинга и обслуживания ваших работников в очереди ...

Взгляните на https://laravel.com/docs/5.7/queues для более глубокого понимания. Приветствия.

0 голосов
/ 18 сентября 2018

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

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

Так что совершенно безопасно использовать очереди Laravel

0 голосов
/ 17 сентября 2018

Если под «безопасным» вы подразумеваете «надежный», то это ничем не отличается от немедленной отправки электронного письма.Если когда-либо существует вероятность того, что ваш сервер «зависает» и не отправляет электронное письмо, эта возможность будет такой же, как и через 10 минут.Как только задание находится в очереди, оно сохраняется до завершения (если только вы не используете драйвер на основе памяти, такой как Redis, который может быть сброшен при перезагрузке сервера).

Если вы используете драйвер очереди базы данныхили удаленный, журнал заданий в очереди останется, даже если сервер будет недоступен в течение короткого периода времени.Ваша очередь будет учтена, даже если точная отметка времени, когда вы хотите отправить задание, истекла.Например, если вы планируете отправить электронное письмо в 13:00, но ваш сервер не работает в тот самый момент, когда он возвращается в рабочее состояние, он все равно будет видеть работу, потому что она хранится как незавершенная, а время для работы уже прошло., который запустит выполнение задания в следующий раз, когда ваш работник очереди проверяет список заданий.

Конечно, это предполагает, что ваш работник очереди настроен на постоянную проверку заданий и автоматический перезапуск, даже послесбой сервера, но это другое обсуждение с множеством решений ... таких, как показано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...