Laravel Queue не работает в качестве фона

привет, я создал задание 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);

но он не работает в качестве фона, функция ожидает до конца очереди, помогите мне, пожалуйста

2

Решение

По умолчанию синхронизировать драйвер используется. Вы должны изменить это на другой драйвер, который указан в config/queue.php

Посмотрите на следующую строку в вашем .env файл и настроить для другого драйвера:

QUEUE_DRIVER=sync

Laravel — Документы — Очереди

3

Другие решения

Вы используете конфигурацию по умолчанию "sync"это означает, что все задания очереди будут выполняться синхронно, а не «запускать и забывать». Чтобы изменить это поведение по умолчанию, вы можете выполнить следующие действия:

1. Выберите другое соединение очереди

Открой .окр файл конфигурации и добавить QUEUE_DRIVER параметр с одним из поддерживаемых значений: «база данных», «beanstalkd», «sqs» или «redis». В этом случае мы будем использовать подключение к базе данных в качестве примера режима: QUEUE_DRIVER=database

2. Отредактируйте драйвер подключения

Открой /config/queue.php файл и настройте подключение вашего драйвера, например:

'database' => [
'driver' => 'mongodb',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90
]

Затем выполните следующие команды, чтобы создать новый jobs Таблица:

php artisan config:cache && php artisan queue:table

Итак, у вас уже есть очередь как «огонь и забудь»; Вы можете попробовать и посмотреть, как jobs таблица была создана с информацией об очереди.

3. Настройте диспетчер процессов для долгосрочной работы

Для выполнения ожидающих очередей в будущем мы можем использовать диспетчер процессов как руководитель. Вы можете установить супервизор для 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

0

По вопросам рекламы [email protected]