Laravel Queue不作为背景运行

时间:2015-12-30 05:37:20

标签: php laravel laravel-queue

您好我创建了一个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);
    }
}

我也是从repo推送数据

$obj = (new SendStudentRequirement($TutorsbyCity,$data));
$this->dispatch($obj);

但它不作为后台运行,函数正在等待队列完成,请帮帮我

2 个答案:

答案 0 :(得分:3)

默认使用 sync 驱动程序。您应该将其更改为config/queue.php

中列出的其他驱动程序

.env文件中查找以下行并调整为其他驱动程序:

QUEUE_DRIVER=sync

Laravel - Docs - Queues

答案 1 :(得分:0)

您正在使用默认配置"sync",这意味着所有队列作业将同步运行,而不是“即发即弃”的方式。要更改此默认行为,您可以按照以下步骤操作:

1.选择一个不同的队列连接

打开 .env 配置文件,并使用受支持的值之一添加 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。为长期运行配置流程管理器

要在将来执行挂起的队列,我们​​可以将流程管理器用作supervisor。您可以运行以下命令为Ubuntu和Debian安装主管: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_NAMEMY_PROJECT。请注意,--sleep参数是验证数据库中新队列的时间(秒)。您可以在official documentation中查看配置文件的更多详细信息。

最后执行以下命令以启用程序:

sudo supervisorctl reread && sudo supervisorctl update

您可以在已配置的日志文件中检查队列的状态: /var/www/MY_PROJECT/storage/logs/worker.log