Laravel队列无法正常工作。已在表格中插入行,但未尝试行

时间:2018-10-17 11:55:05

标签: laravel laravel-queue

到目前为止我所做的:

1)将队列驱动程序更新为.env中的数据库

2)我的邮件控制器功能如下:

public function sendEmail()
{
   $emailJob = (new SendEmailJob())->delay(Carbon::now()->addSeconds(3));
   dispatch($emailJob);
    exit();
}

3)SendEmailJob句柄

public function handle()
{
    Mail::to('mail@gmail.com')->send(new SendMailable());
    echo 'email sent';
}

4)SendMailable Mail具有以下内容

public function build()
{
    return $this->view('emails.ownership');
}

我想在到达URL后几乎立即发送邮件。 当我以3秒的延迟运行php artisan queue:listen时,需要很长时间才能采取任何措施。我可以在0次尝试的作业表上看到一些数据。

长时间后,在命令窗口中弹出以下错误消息

   Symfony\Component\Process\Exception\ProcessTimedOutException  : The process ""C:\wamp64\bin\php\php7.2.10\php.exe" "artisan" queue:work  --once --queue="default" --delay=0 --memory=128 --sleep=3 --tries=0" e
xceeded the timeout of 60 seconds.

  at C:\wamp64\www\project\vendor\symfony\process\Process.php:1154
    1150|
    1151|         if (null !== $this->timeout && $this->timeout < microtime(true) - $this->starttime) {
    1152|             $this->stop(0);
    1153|
  > 1154|             throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_GENERAL);
    1155|         }
    1156|
    1157|         if (null !== $this->idleTimeout && $this->idleTimeout < microtime(true) - $this->lastOutputTime) {
    1158|             $this->stop(0);

  Exception trace:

  1   Symfony\Component\Process\Process::checkTimeout()
      C:\wamp64\www\project\vendor\symfony\process\Process.php:383

  2   Symfony\Component\Process\Process::wait()
      C:\wamp64\www\project\vendor\symfony\process\Process.php:202

通过这种方式,可以直接发送邮件而无需排队的东西。另外,这是必须运行php artisan queue:listen吗?我应该如何在没有外壳访问权限的服务器上运行它?

1 个答案:

答案 0 :(得分:0)

The process exceeded the timeout of 60 seconds

要解决此问题,您必须增加工作超时时间也就不足为奇了。为此,您可以使用--timeout命令中的queue:work选项来增加180秒的超时时间,也可以像这样在作业类中定义变量:{{1} }

Laravel docs

1。使用--timeout

  

可以使用以下命令指定作业可以运行的最大秒数   Artisan命令行上的--timeout开关

2。使用$ timeout

  

您还可以定义作业的最大秒数   允许在作业类本身上运行。如果指定了超时   作业,它将优先于   命令行

对于您的其他问题:

  

这是强制运行php artisan queue:listen吗?

  

我应该如何在没有外壳访问权限的服务器上运行它?

使用SupervisorLaravel Horizon(如果您将Redis用于队列)