У меня есть таблица с 100K + электронными письмами, куда я хочу ежедневно отправлять письма:
Я добавил расписание в app \ Console \ Kernel.php:
$schedule->job(new SendDailyEmails)->dailyAt('09:00');
Внутри работы у меня есть:
$users = User::all();
foreach($users as $user){
Maill:to($user->email)->send(new DailyMail($user));
$status = 'sent';
if( in_array($user->email, Mail::failures()) ){
$status = 'failed';
Log::error($user->email . ' was not sent.');
}else{
Log::info($user->email . ' was sent.');
}
SentMail::create([
'email' => $user->email,
'status' => $status
]);
}
Это работает нормально, но через некоторое время это останавливается, вероятно, из-за тайм-аута задания.В таблице failed_jobs я получаю MaxAttemptsExceededException
с сообщением о том, что Job пытался выполнить слишком много раз или выполняется слишком долго.Так как я установил очередь пытается максимум 3 в супервизоре, он должен идти только 3 раза.И, проверяя вещи, он не пытался повторить попытку, потому что я получил одно письмо вместо 3.
Так что дело доходит до тайм-аута, и я не уверен, что является значением по умолчанию, но имеет ли это значение, так как я не буду знать, каксколько времени потребуется, чтобы отправить все электронные письма?
Должен ли я разделить почту на группы по 50 и вызвать отдельные экземпляры заданий для каждой группы?
У кого-нибудь есть хороший рабочий ответ на этот вопрос?