问题描述
场景需求:用户注册完毕之后自动发送一封欢迎邮件给用户.
问题出现的环境背景及现有代码
考虑到邮件发送压力问题,因此使用队列发送邮件,目前的实现逻辑是,建立观察者对User
模型进行观察.UserOberver
文件代码如下:
<?php
namespace App\Observers;
use App\Mail\Welcome;
use App\User;
use Illuminate\Support\Facades\Mail;
class UserObserver
{
//当用户注册后调用welcome邮件类发送欢迎邮件.
public function created(User $user)
{
Mail::to($user)->send(new Welcome($user->name));
}
}
建立了welcome
邮件类,代码如下:
<?php
namespace App\Mail;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class Welcome extends Mailable
{
use Queueable, SerializesModels;
public $name;
public function __construct($name)
{
$this->name=$name;
}
public function build()
{
//使用邮件模板welcome向用户发送邮件,为了方便演示,请暂时忽略主题变量为`name`的事情.
return $this->view('mail.welcome')->subject($this->name);
}
}
现状
目前观察者是没有使用队列发送邮件的,根据laravel 5.8文档,可以使用queue
将邮件加入队列.
官网文档及示例代码如下:
https://learnku.com/docs/lara...
将邮件消息加入队列
由于发送邮件消息可能大幅度延长应用的响应时间,许多开发者选择将邮件消息加入队列放在后台发送。Laravel 使用内置的 统一队列 API 简化了这一工作。若要将邮件消息加入队列,可以在制定消息的接收者后,使用
Mail facade
的queue
方法:
Mail::to($request->user())
->cc($moreUsers)
->bcc($evenMoreUsers)
->queue(new OrderShipped($order));
此方法自动将作业推送到队列中以便消息在后台发送。使用此特性之前,需要 配置队列
:
想实现的效果及疑难
- 使用队列发送邮件
目前我项目里面有两个队列文件CreateFile
和SendEmail
在使用CreateFile
队列时我是讲逻辑写入了其的handle
方法中实现,例如
public function handle()
{
Log::alert('redis 队列测试');
}
- 面临的问题
1.之前是将业务逻辑写到了队列文件的handle()
方法中,而我的项目目前的逻辑已经写入了welcome
中,如果是按文档所说使用queue
调用队列,我的队列文件SendEmail
的handle()应该如何写?2.另外
queue
视乎并无参数可用,我如何实现将发送邮件推送到哪个队列呢?
就在你贴的链接下面一点儿,你是真的没看到么。。。