我试图发送多个带队列的电子邮件(beanstalkd)。我的应用程序发送了一些电子邮件,然后我收到超时异常。
foreach ($emails as $e) {
Mail::queue('emails.invite', ["username" => Auth::user()->username, "grupa" => $naziv, "id" => $id, "email" => $e], function($message) use ($e){
$message->to($e)->subject("Pridruži nam se!");
});
}
是否有办法将所有电子邮件放入队列,因此当系统可用时,应发送电子邮件。
编辑:超时异常的完整消息:
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Maximum execution time of 30 seconds exceeded","file":"\/home\/forge\/default\/vendor\/nikic\/php-parser\/lib\/PHPParser\/NodeAbstract.php","line":110}}
答案 0 :(得分:1)
你好吗?如果您正在使用beanstalk(或任何队列),那么您正在从应用程序(生产者,发送到队列)以及从队列中消耗数据并发送电子邮件的工作进程执行操作。
制作人只是将电子邮件放入beanstalk,这很容易......
消费者应该是一个长时间运行的进程,它应该从cli执行,没有最大时间执行(你必须调整php-cli的php.ini)。在循环中,您应该检查队列中是否有新内容并发送电子邮件。
基本上,听起来像你的问题是消费者部分设置了最大的执行时间,所以它不能在X秒后的while循环中消耗电子邮件。调整并确保没有限制。