在Laravel中实现电子邮件队列的最有效方式

问题描述:

我想在Laravel中实现发送电子邮件的队列。我的队列工作正常,但担心效率。这些是我的设置:在Laravel中实现电子邮件队列的最有效方式

我已创建作业表并设置.env文件,以使用我的本地数据库的队列。

我已经建立了在服务器上的这个crontab中:

* * * * * php /var/www/imagine.dev/artisan schedule:run >> /dev/null 2>&1 

并在应用程序\ Conosle \ Kernel.php建立一个时间表,所以我不必手动输入“队列:听”每时间通过控制台。

$schedule->command('queue:listen'); 

现在我的问题。我想知道这是否有效?我很担心有个队列:一直在后台运行,消耗CPU和内存。

我一直在试图只运行队列:听一次,每次5分钟,然后把它与

$schedule->command('queue:listen --sleep 300'); 

,但再次入睡,我不知道这是最好的办法。

我试过的另一件事是使用'队列:工作',但是这只能一次处理一个队列。

理想情况下,我想要一种方法,每隔5分钟处理一次所有队列,避免不断使用内存和cpu。

什么是最好的方法?

+0

在调用'queue:listen'方法时,应用程序被完全引导。这大大减少了所需的CPU数量。然而,应用程序将被捆绑到内存中,所以会有一些用法,这种用法取决于你已经添加到引导程序的多少(我认为它是最小的,例如99%的情况)。有了这个说法,除非这些电子邮件绝对是大规模的,否则这种用法将会极其微不足道,我猜测事实并非如此。我一贯每天发送数以万计的电子邮件,并没有任何问题。 – Ohgodwhy

+0

@Ohgodwhy你是否建议我简单地使用队列:听制作?没有超时? –

不确定您使用的是哪个版本的Laravel,但我怀疑它是5.2或更早的版本。 您不需要每分钟运行一次,它都会继续运行,直到手动停止。

从Laravel 5.2文档:

注意,一旦这项工作已经开始,它将继续运行,直到它被手动停止。您可以使用进程监视器(如Supervisor)来确保队列侦听器不会停止运行。

因此,也许你想看看Supervisor

此外,如果这是有帮助的所有,你可以到连锁$时间表, - > everyFiveMinutes()。还有其他几种方法可用。 Laravel Scheduling