привет, я создал задание Laravel Queue для отправки почты
public function handle() {
foreach($this->emails as $value) {
$to = $value->email;
$subject = $this->data['subject'];
$this->data['t_firstname'] = $value->firstname;
$this->data['t_lastname'] = $value->lastname;
if (view()->exists('mail.requirement_to_tutor')) {
$view = view('mail.requirement_to_tutor',$this->data);
$html = $view->render();
}
file_put_contents('test.txt', 'test database');
$body = $html;
$headers = "From: " . $this->data['from'] . "\r\nReply-To: " . $this->data['from'] . "";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset: utf8\r\n";
mail($to, $subject, $body, $headers);
}
}
а также я выталкиваю данные из репо
$obj = (new SendStudentRequirement($TutorsbyCity,$data));
$this->dispatch($obj);
но он не работает в качестве фона, функция ожидает до конца очереди, помогите мне, пожалуйста
По умолчанию синхронизировать драйвер используется. Вы должны изменить это на другой драйвер, который указан в config/queue.php
Посмотрите на следующую строку в вашем .env
файл и настроить для другого драйвера:
QUEUE_DRIVER=sync
Вы используете конфигурацию по умолчанию "sync"
это означает, что все задания очереди будут выполняться синхронно, а не «запускать и забывать». Чтобы изменить это поведение по умолчанию, вы можете выполнить следующие действия:
Открой .окр файл конфигурации и добавить QUEUE_DRIVER параметр с одним из поддерживаемых значений: «база данных», «beanstalkd», «sqs» или «redis». В этом случае мы будем использовать подключение к базе данных в качестве примера режима: QUEUE_DRIVER=database
Открой /config/queue.php файл и настройте подключение вашего драйвера, например:
'database' => [
'driver' => 'mongodb',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90
]
Затем выполните следующие команды, чтобы создать новый jobs
Таблица:
php artisan config:cache && php artisan queue:table
Итак, у вас уже есть очередь как «огонь и забудь»; Вы можете попробовать и посмотреть, как jobs
таблица была создана с информацией об очереди.
Для выполнения ожидающих очередей в будущем мы можем использовать диспетчер процессов как руководитель. Вы можете установить супервизор для Ubuntu и Debian, выполнив следующую команду: sudo apt-get install supervisor
Затем откройте файл supervisor: sudo nano /etc/supervisor/supervisord.conf
и добавьте следующую строку в конец файла:
[program:laravel-worker-QUEUE_NAME]
process_name=%(program_name)s_%(process_num)02d
command= php /var/www/MY_PROJECT/artisan queue:work --queue=QUEUE_NAME --sleep=15
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/MY_PROJECT/storage/logs/worker.log
Заменить значения: QUEUE_NAME
а также MY_PROJECT
, Обратите внимание, что --sleep
Параметр — время (в секундах) для проверки новых очередей в базе данных. Вы можете увидеть более подробную информацию о файле конфигурации в официальная документация.
Наконец, выполните эти команды, чтобы включить программу:
sudo supervisorctl reread && sudo supervisorctl update
Вы можете проверить состояние очередей в настроенном файле журнала: /var/www/MY_PROJECT/storage/logs/worker.log