Laravel:用laravel排队邮件

时间:2018-01-26 17:28:58

标签: php laravel email laravel-5

我想按照https://laravel.com/docs/5.5/mail#queueing-mail中解释的那样对邮件进行排队。

这是我到目前为止所做的:

  1. 我更改了QUEUE_DRIVER文件

    中的.env
    QUEUE_DRIVER=database
    
  2. 我创建了job table

    php artisan queue:table
    php artisan migrate
    
  3. 我将这样的邮件添加到队列中:

    Mail::to($request->user())
        ->queue(new OrderShipped($order));
    

    我设置了一个cronjob,它会像docs中所解释的那样发送查询的邮件:

    protected function schedule(Schedule $schedule)
    {
        $schedule->command('php artisan queue:work --once')->everyMinute();
    }
    

    如果我只写$schedule->command('php artisan queue:work')->everyMinute();,那么工作流程永远不会停止,所以服务器在某些时候会非常繁忙,有很多并行工作流程,对吗?

    为了查询带有laravel的邮件,我是否遗漏了任何重要内容?另外,如果我想每分钟发送最多5封邮件 - 我怎么能实现这一目标呢?

2 个答案:

答案 0 :(得分:0)

我认为不是cron job,而是设置一个supervisor配置。它将有助于监视队列作业。可以使用以下文档轻松配置它。

https://laravel.com/docs/5.5/queues#supervisor-configuration

答案 1 :(得分:0)

我认为不是每分钟都开始命令

php artisan queue:work --once

最好一次启动工作队列并添加一个睡眠定时器:

php artisan queue:work --sleep=60

这会每分钟完成一项工作。如果一个人每分钟想做5个工作就可以减少睡眠时间:

php artisan queue:work --sleep=12