我认为我的问题更多是后备,现在我在Laravel作业队列中有两个队列作业,而我正在使用数据库驱动程序。第一个命令根据API调用从另一个站点为我的用户创建凭据,第二个命令是通过电子邮件进行验证和2FA。此外,还有另一个更新命令会更改我的单位转换率。
protected function schedule(Schedule $schedule){
$schedule->command('update:conversionRate')->everyFiveMinutes();
$schedule->command('queue:work')->everyMinute();
}
使用dispatch命令将队列作业添加到我的队列中,当电子邮件使用shouldQueue时,API调用使用调度函数的shouldQueue接口。
现在它可以工作,因为我可以看到我的数据库中的作业。但是当服务器cron作业运行时它会崩溃,我的日志文件显示我的MySQL用户已达到最大连接限制。因此,没有人可以使用该用户帐户评估数据库。
所以我的问题是如何设置cron作业和queue:work
以便它不会使服务器崩溃?
答案 0 :(得分:1)
我如何通过与数据库的最大连接来理解您的问题。
第一种解决方案,但最好不要增加对数据库的连接限制。
第二种解决方案是使用队列。您还没有尝试使用驱动程序而不是数据库,例如redis或beanstalkd?
您还可以每分钟运行一次命令。将cron作业用于队列是一种不好的做法。这是一个主管。
此外,与团队一起,尝试使用队列:工作参数。
示例强>
php artisan queue:work --sleep=3 --tries=3 --daemon
- sleep这个处理程序将在处理队列元素之间有一个中断
- tries = 3如果由于某种原因该项目将不会被处理,在此参数之后它将尝试3次并继续下一个元素,默认情况下它将尝试多次尝试。
尝试这些选项。