#laravel #laravel-7 #laravel-jobs #laravel-vapor
#ларавель #laravel-7 #laravel-задания #laravel-пар
Вопрос:
Я отправляю около 7 тысяч электронных писем, используя Laravel и SES. Поскольку у меня есть ограничение в 10 электронных писем в секунду, мне нужно задерживать, когда Laravel отправляет все электронные письма партиями по 10 за раз.
Контроллер
public function queue(){
$invites = Subscriber::all();
$send_at = now();
foreach ($invites as $i => $invite){
if($i % 10 == 0){
$send_at = $send_at->addSeconds(1);
}
SendEmailJob::dispatch($invite)->delay($send_at);
}
dd('sent!');
}
И эта работа
public function handle()
{
Mail::to($this->user->email)->send(new InviteMail($this->user));
}
Это дало мне ошибку тайм-аута, но, как ни странно, он поставил в очередь все 7 тысяч писем и отправил их. Мне просто любопытно, почему я получил ошибку.
Ответ №1:
Поместите эту функцию в начало вашей функции контроллера
set_time_limit() //In seconds
Это увеличит максимальное время выполнения.
Комментарии:
1. Но для постановки всех заданий в очередь должно потребоваться всего 1 секунда. Мне не нужно ждать, пока он отправит все электронные письма.
2. Возможно, вы неправильно ставите в очередь. Посмотрите это, это поможет вам поставить почту в очередь Laravel
Ответ №2:
проверьте значение max_execution_time в вашем файле php.ini или используйте set_time_limit(700);
в своем function queue()
700 исходят из 7000 приглашений / 10 = 700 сегментов
max_execution_time по умолчанию составляет 300 сегментов
Комментарии:
1. Но для постановки всех заданий в очередь должно потребоваться всего 1 секунда. Мне не нужно было ждать, пока он отправит все электронные письма. Верно?