Laravel 队列不 运行 作为背景
Laravel Queue doesnt run as background
嗨,我创建了一个 laravel 队列作业来发送邮件
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);
但它没有 运行 作为背景,该功能正在等待队列完成,请帮帮我
默认使用 sync 驱动程序。您应该将其更改为 config/queue.php
中列出的另一个驱动程序
在您的 .env
文件中查找以下行并调整为不同的驱动程序:
QUEUE_DRIVER=sync
您正在使用 "sync"
的默认配置,这意味着所有队列作业将 运行 同步而不是 "fire and forget" 方式。要更改此默认行为,您可以按照以下步骤操作:
1. Select 不同的队列连接
打开 .env 配置文件并添加 QUEUE_DRIVER 参数,其中一个支持的值是:"database"、"beanstalkd"、"sqs" 或 "redis"。在这种情况下,我们将使用 数据库连接 作为示例模式:QUEUE_DRIVER=database
2. 编辑连接驱动程序
打开/config/queue.php文件并配置你的驱动连接,例如:
'database' => [
'driver' => 'mongodb',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90
]
然后运行下一个命令创建新的jobs
table:
php artisan config:cache && php artisan queue:table
因此,您已经拥有 "fire and forget" 方式的队列;你可以试试看 jobs
table 是如何用队列的信息创建的。
3。为 long-运行ning
配置进程管理器
为了将来执行挂起的队列,我们可以使用进程管理器作为 supervisor。您可以为 Ubuntu 和 Debian 运行 安装 supervisor,使用以下命令:sudo apt-get install 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
参数是验证数据库中新队列的时间(秒)。您可以在 official documentation.
中查看配置文件的更多详细信息
最后执行这些命令以启用程序:
sudo supervisorctl reread && sudo supervisorctl update
您可以在配置的日志文件中检查队列的状态:/var/www/MY_PROJECT/storage/logs/worker.log
嗨,我创建了一个 laravel 队列作业来发送邮件
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);
但它没有 运行 作为背景,该功能正在等待队列完成,请帮帮我
默认使用 sync 驱动程序。您应该将其更改为 config/queue.php
在您的 .env
文件中查找以下行并调整为不同的驱动程序:
QUEUE_DRIVER=sync
您正在使用 "sync"
的默认配置,这意味着所有队列作业将 运行 同步而不是 "fire and forget" 方式。要更改此默认行为,您可以按照以下步骤操作:
1. Select 不同的队列连接
打开 .env 配置文件并添加 QUEUE_DRIVER 参数,其中一个支持的值是:"database"、"beanstalkd"、"sqs" 或 "redis"。在这种情况下,我们将使用 数据库连接 作为示例模式:QUEUE_DRIVER=database
2. 编辑连接驱动程序
打开/config/queue.php文件并配置你的驱动连接,例如:
'database' => [
'driver' => 'mongodb',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90
]
然后运行下一个命令创建新的jobs
table:
php artisan config:cache && php artisan queue:table
因此,您已经拥有 "fire and forget" 方式的队列;你可以试试看 jobs
table 是如何用队列的信息创建的。
3。为 long-运行ning
配置进程管理器为了将来执行挂起的队列,我们可以使用进程管理器作为 supervisor。您可以为 Ubuntu 和 Debian 运行 安装 supervisor,使用以下命令:sudo apt-get install 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
参数是验证数据库中新队列的时间(秒)。您可以在 official documentation.
最后执行这些命令以启用程序:
sudo supervisorctl reread && sudo supervisorctl update
您可以在配置的日志文件中检查队列的状态:/var/www/MY_PROJECT/storage/logs/worker.log