【发布时间】:2018-09-23 11:30:06
【问题描述】:
我认为我的问题更多是回退,现在我的 Laravel 作业队列中有两个队列作业,并且我正在使用数据库驱动程序。第一个命令基于 API 调用从另一个站点为我的用户创建凭据,第二个命令是通过电子邮件发送验证和 2FA。此外,还有另一个命令可以更新更改我的单位转换率。
protected function schedule(Schedule $schedule){
$schedule->command('update:conversionRate')->everyFiveMinutes();
$schedule->command('queue:work')->everyMinute();
}
使用 dispatch 命令和 shouldQueue 接口将队列作业添加到我的队列中,API 调用使用 dispatch 函数,而电子邮件使用 shouldQueue。
现在它可以工作了,因为我可以在我的数据库中看到作业。但是当服务器 cron 作业运行时它会崩溃,并且我的日志文件显示我的 MySQL 用户已达到最大连接限制。因此,没有人可以使用该用户帐户评估数据库。
所以我的问题是如何设置 cron 作业和 queue:work 使其不会导致服务器崩溃?
【问题讨论】:
-
您以错误的方式使用队列。一旦队列工作(队列:工作),您无需执行即可使其再次工作。使用 beanstalkd 确保您的队列始终运行。
-
请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
-
您需要找出达到连接限制的原因。 cron 作业的单个实例需要多少个连接?您是在运行一个循环,然后在循环内打开连接,而不是在循环外打开一个连接吗?