php - Laravel:Mail::queue 和 $this->dispatch 有什么区别?

标签 php laravel email queue laravel-5.2

所以我目前正在阅读有关邮件队列的 Laravel 文档,但我已经失去了想法,Mail::queue(<params>) 之间有什么区别?和 $this->dispatch(new SendMail(<params>)) .因为在 Laravel 文档的 Mail 部分给出了第一个变体,但后来又说“不要忘记先配置你的队列”。我去了队列配置部分,在那里我发现“要添加一些东西到队列只需使用 $this->dispatch($job)”。

所以,我做了两种变体:其中一种看起来如下:

Mail::queue('emails.template', 
   ['name'=>$name, 'msg'=>$message], 
   function($msg) use ($email){
   $msg->to($email)
   ->subject('Application received');
  }
);

第二个,在同一个 Controller 中,但其他方法是:

$this->dispatch(new SendEmail($name, $message, $email));

在第二种变体中,我使用作业,即 handle()方法和之前的代码一样,只是用Mail::send .

并且在这两种变体中,用户必须等待相同的时间,php artisan queue:listen保持沉默,但邮件发送成功。

我应该怎么做才能弄清楚我的情况?非常感谢任何可能的帮助!

最佳答案

就像 Laravel 的许多部分一样,通常有一种简单的方法来做某事,然后有一种方法可以让你有更多的控制权。这两种发送电子邮件的方法略有不同。让我们来看看他们两个......

邮件::队列()

  • 使用外观访问器
  • 实际方法位于 Illuminate\Mail\Mailer::queue()
  • 通过接收电子邮件模板/ View 、任何关联的发送数据和回调函数(如果我们想指定一个)来为您完成繁重的工作
  • 真正可以在任何地方调用,无需额外配置或创建新类
  • 将为您将要发送的新电子邮件直接推送到队列中。

$this->dispatch(new SendReminderEmail())

  • 作业的手动调度(在本例中为 SendReminderEmail 作业实例)
  • 需要在 Controller 中使用,因为关联的 dispatch 方法仅在 DispatchesJobs 特性中可用。
  • 此方法分派(dispatch)相关作业。在此示例中,暗示 SendReminderEmail 实际上会将一封新电子邮件发送到队列。
  • 如果您希望加强对实际分派(dispatch)工作的控制,请使用。您可以在此处添加与发送电子邮件相关的任何其他功能。例如,可能有自定义逻辑在发送电子邮件之前过滤电子邮件的内容。
  • 您需要手动创建作业,而 Mail facade 已经包含作业,隐藏在我们的实现之外。

有点遗憾的是 5.2 文档使用邮件作为事件分派(dispatch)的示例,因为大多数开发人员只会使用 Mail::queue()。混淆是有道理的。

关于队列的速度,我不确定为什么你的队列会比预期的慢,抱歉!

关于php - Laravel:Mail::queue 和 $this->dispatch 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38325988/

相关文章:

php - CI环境中的自动部署PHP(Jenkins)

php - 使用 php 服务器聊天 android 的可行性?

php - Laravel Eloquent 和复杂的关系

c# - MailKit smtp.office365.com特殊字符编码问题

java - 如何使用 google+ token 从 https ://www. googleapis.com/plus/v1/people/me 调用获取电子邮件?

php - 无尽的 php 邮件循环

php - 使用 PHPUnit,使用数据提供程序,最后一个数据集始终显示 "The test case was unexpectedly terminated"

php - Laravel Action 未定义

php - Ajax 和 Laravel - 无法根据动态下拉选择填充文本框

javascript - 将 PHP 数组传递给 JavaScript 时出现问题