所以我现在正在阅读关于邮件排队的Laravel文档,我已经忘记了这个想法,Mail::queue(<params>)
和$this->dispatch(new SendMail(<params>))
之间有什么区别。因为在Laravel文档的Mail部分中给出了第一个变体,但随后它被称为“不要忘记首先配置你的队列”。我去了Queue配置部分,在那里我发现“添加一些东西到队列只需使用$this->dispatch($job)
”。
所以,我做了两个变体:其中一个看起来如下:
Mail::queue('emails.template',
['name'=>$name, 'msg'=>$message],
function($msg) use ($email){
$msg->to($email)
->subject('Application received');
}
);
第二个,在同一个控制器中,但其他方法,只是:
$this->dispatch(new SendEmail($name, $message, $email));
在第二个版本中,我使用job,handle()
方法与之前的代码相同,只是使用Mail::send
。
在两种变体中,用户必须等待相同的长时间,php artisan queue:listen
保持沉默,但电子邮件已成功发送。
我应该怎样做才能澄清我的情况?非常感谢任何可能的帮助!
答案 0 :(得分:1)
就像许多Laravel一样,通常会有一种简单的方法来做某事,然后再给您更多的控制权。两种发送电子邮件的方法略有不同。让我们看看他们两个...
Mail::queue()
Illuminate\Mail\Mailer::queue()
$this->dispatch(new SendReminderEmail())
SendReminderEmail
作业实例)dispatch
方法仅在DispatchesJobs
特性内可用。SendReminderEmail
实际上将进行新电子邮件发送到队列的推送。 Mail
门面已经包含了该作业,而对于我们的实现而言则是隐藏的。不幸的是,5.2文档使用邮件作为事件分发的示例,因为大多数开发人员只需要接触Mail::queue()
。令人困惑的是这里。
关于队列速度,我不确定为什么您的队列会比预期的慢,对不起!