Laravel - Как сохранить задачу с указанным классом и свойствами и получать ее каждую минуту снова? - PullRequest
0 голосов
/ 13 апреля 2019

Цель:

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

Для этого я хочу использовать Планирование задач.

Однако яЯ не уверен, как решить эту проблему с моей конечной целью API:

SmsNotificaton::send($user, new OrderReceived($order));

Как бы вы это сделали?


Объяснение:

Я хочусэкономьте немного денег, не отправляя SMS напрямую пользователю, только через 15 минут прошло, и статус заказа не изменился.

Внутри new OrderReceived($order) У меня будет handle метод.Этот метод просто проверяет, изменился ли статус заказа или нет.Если изменено, мы отправляем SMS через мой SmsGateway.


Проблема:

Как бы вы сохранили данные $user и new OrderReceived($order) в базе данных , так что вы можете вызывать команду cron каждую минуту , чтобы снова извлечь старые данные $user и new OrderReceived($order), чтобы проверить, можно ли их отправить?

Этодолжно быть очень похоже на работу системы очередей Laravel, но я попытался понять, как работает сериализация, но не могу понять, как диспетчер сохраняет данные и т. д.

1 Ответ

1 голос
/ 13 апреля 2019

То, что вы хотите сделать, это использовать встроенные задания и очереди в laravel

Вам нужно будет создать новое задание, например CheckStatusThenSendSMSJob(), которое при отправке будет проверять, изменился ли статус заказа или его следует отправить.message

Тогда вместо отправки сообщения вам нужно отправить задание с задержкой

CheckStatusThenSendSMSJob($order)::dispatch->delay(now()->addMinutes(15));

Более подробная информация об очередях и отложенной отправке в документации laravel: https://laravel.com/docs/5.8/queues#delayed-dispatching

Также убедитесь, что вы действительно настроили свою очередь на запуск в фоновом режиме (в другом процессе), используя либо драйвер redis, либо драйвер базы данных для очередей (по умолчанию установка laravel запускает очереди, когда они вызываются синхронно)

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