как ПРАВИЛЬНО сделать массовую рассылку.
Надо отправлять по 100 писем, потом перерыв например 30 сек.
потом дальше.(задается параметром)
В данный момент у меня так.
Выбираем какой роли юзеров слать, пишем текст, тему,
нажимаем создать. Это простой CRUD
Потом нажимаем кнопку сформировать рассылку (там 60к писем)
дальше в контроллере запускается
Код: Выделить всё
Yii::$app->queue->push(new \app\models\NewsLettersCreateJob([
'newsLetterId' => $id,
'newsLetterCount' => Yii::$app->params['newsLetterCount'],
'newsLetterDelay' => Yii::$app->params['newsLetterDelay']
]));
$queue = Yii::$app->queue;
$queue->run(false);
и в цикле создает еще очереди
Код: Выделить всё
foreach ($users as $user){
// тут всяко разно делает
if($i % $this->newsLetterCount == 0 || count($users) < $this->newsLetterCount){
\Yii::$app->db->createCommand()->batchInsert(NewsletterQuene::tableName(), NewsletterQuene::attributesName(), $insert)->execute();
// раз в 100 писем создает задачу
$insert = [];
\Yii::$app->queue->delay($this->newsLetterDelay + ($this->newsLetterDelay * ($i / 100)))->push(new NewsLetterJob([
'newsLetterId' => $model->id,
]));
}
} // end loop
для того, что бы как то работало, пришлось пока delay устанавливать рекурсивно
Я понимаю, что это все костыль на костыле.
Не могли бы вы объяснить, пожалуйста, как это правильно надо делать.
По ТЗ рассылка должна создаваться одной кнопкой, после создания
(как то получать статус что отработал Джоб по созданию) должна
появляться вторая кнопка отправить рассылку,
и по ее нажатию должна уже запускаться очередь по отправке.
И как решить вопрос с таймаутом между джобами по рассылке.
Я предполагаю, что каналы какие то надо использовать, но вообще не втыкаю что это.
и да. драйвер queue - db
само расширение - yiisoft/yii2-queue
Заранее спасибо