Yii2 queue delay

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
zemlia-zemlia
Сообщения: 35
Зарегистрирован: 2019.12.05, 20:03

Yii2 queue delay

Сообщение zemlia-zemlia »

Здравствуйте, тут с вашей помощью, осваиваю queue
и возник вопрос. Вот у меня задача сделать очередь рассылки
Есть 5000 писем их надо отправить по 100 штук с перерывам одну минуту.
я создаю 100 писем, потом пишу -

Код: Выделить всё

 Yii::$app->queue->delay(Yii::$app->params['newsLetterDelay'])->push(new NewsLetterJob([
                    'newsLetterId' => $model->id,

                ]));
и так далее в цикле.
Я пробовал вот так запускать, но насколько я понял, delay это время,
от момента запуска до момента выполнения. Так?

И второй вопрос. Мне приходит на ум решить эту проблему только рекурсивно -
увеличивать делай каждой следующей задачи на (сумма всех delay до нее + сам delay)
Но это костыль.
Есть ли какой то способ указать время между выполнениями 2х задач в очереди?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Yii2 queue delay

Сообщение yiijeka »

Если отправите 101 письмо в минуту, то скорее всего прилетит откуда-то ошибка, ловим её и обрабатываем.
Запуск NewsLetterJob хоть каждую секунду тогда можно запускать. В случае лимита, просто корректно завершается job и письмо остаётся с пометкой неотправлено и отправиться когда это возможно.
zemlia-zemlia
Сообщения: 35
Зарегистрирован: 2019.12.05, 20:03

Re: Yii2 queue delay

Сообщение zemlia-zemlia »

yiijeka писал(а): 2019.12.26, 11:10.
Запуск NewsLetterJob хоть каждую секунду тогда можно запускать.
А откуда его запускать? вот в чем вопрос.
я хочу запустить 600 задач кнопкой на сайте, пойти гулять по сайту дальше, а они чтоб работали.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Yii2 queue delay

Сообщение yiijeka »

Кнопка на сайте делает, какую то отметку, например создаёт одну строчку данных в базе данных:
"Создать 600 задач" и "время когда нужно создать"

Всё - пользователь свободен.

Дальше какой-то скрипт по крону, например, запускается периодически и смотрит есть ли новые строчки в базе данных. Находит
"Создать 600 задач" и "время когда нужно создать" создаёт 600 задач (NewsLetterJob) и пихает их в очередь.

В очереди есть воркер, который берёт NewsLetterJob и на основании сведений из этой job отправляет письмо.

Почитайте что-нибудь про конкретные реализации очередей, попрактикуйтесь -
https://ruhighload.com/search?q=/%D0%9E ... 0%B4%D0%B8
Ответить