到目前为止我所做的:
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吗?我应该如何在没有外壳访问权限的服务器上运行它?
答案 0 :(得分:0)
The process exceeded the timeout of 60 seconds
要解决此问题,您必须增加工作超时时间也就不足为奇了。为此,您可以使用--timeout
命令中的queue:work
选项来增加180
秒的超时时间,也可以像这样在作业类中定义变量:{{1} }
1。使用--timeout
可以使用以下命令指定作业可以运行的最大秒数 Artisan命令行上的--timeout开关
2。使用$ timeout
您还可以定义作业的最大秒数 允许在作业类本身上运行。如果指定了超时 作业,它将优先于 命令行
对于您的其他问题:
这是强制运行php artisan queue:listen吗?
否
我应该如何在没有外壳访问权限的服务器上运行它?
使用Supervisor或Laravel Horizon(如果您将Redis用于队列)