【发布时间】:2019-08-22 06:45:33
【问题描述】:
我想在我的网站上创建帐户后向用户发送邮件,我想使用队列来发送邮件。我正在使用 PHP Laravel 框架。
我的控制器在点击“创建帐户”后处理请求:
class LoginController extends Controller
{
...
public function register(Request $request) {
...
$mail = (new RegisterRequest($user))->onConnection("database")->onQueue("emailsQueue");
Mail::queue($mail);
...
}
}
然后我有这个 RegisterRequest(可邮寄)类:
class RegisterRequest extends Mailable
{
use Queueable, SerializesModels;
protected $user;
public function __construct($user)
{
$this->user = $user;
}
public function build()
{
return $this->from('user@example.com')
->to($this->user->email)
->subject("Confirm your Email Address")
->view('emails.register.request')
->with("registration_token", $this->user->registration_token);
}
}
如您所见,我使用关系数据库来存储作业。实际上,在调用 LoginController 的 register 方法之后,一个作业被保存到数据库中。但无法处理。我也开始php artisan queue:work,但数据库中的作业没有做任何事情。有什么帮助吗?
编辑:
所以我刚刚发现从队列中挑选作业是通过 SQL 选择“默认”队列名称来完成的。但我正在向队列“emailsQueue”发送邮件。所以我现在像这样运行 Queue Worker:php artisan queue:work --queue=emailsQueue,现在一切正常。但是我怎样才能从数据库中的每个队列中挑选工作呢?这可能不是最好的尝试,对吧?命名队列没有任何意义,对吧?但是假设我有一个用于处理注册帐户请求的队列,另一个用于更改密码请求的队列等等......所以我认为处理每个队列确实有意义。那么我该怎么做呢?像这样列出队列就可以做到吗?
php artisan queue:work --queue=registerAccountEmailQueue,changePasswordEmailQueue...
运行php artisan queue:work 到底是什么?我认为这是运行所有队列的命令。
【问题讨论】:
-
失败的作业中有条目吗?
-
不,所做的一切都是将记录保存到数据库表'jobs'。什么都没有做。
-
您在 env 数据库或同步中的队列驱动程序是什么?
-
它是“数据库”
-
试试这个方法:Mail::to($user)->send(new RegisterRequest);