Laravel 队列运行一段时间然后停止,没有任何异常

问题描述 投票:0回答:1

问题

我的工作是将电子邮件推送到 Laravel 队列中,然后将它们发送到 SendGrid。 邮件队列有 15k 个作业,但一旦达到 3.8k 左右,它就会停止,没有任何错误或警告。当它到达队列末尾时它就会停止,留下失败的作业。

代码

这是我用来将作业添加到队列的代码:

$message = (new SongChallengeEmail(
    $this->getUsername($emailRawData->name, $emailRawData->username, $emailRawData->email),
    $emailRawData->email,
    $emailRawData->artists
))
    ->onConnection('database')
    ->onQueue('emails');

Mail::queue($message);

我尝试了什么

最初,我以为是php的内存限制的问题,所以我尝试分配比默认(128MB)更多的内存。我尝试了两种配置:

php artisan queue:work database --queue=emails --memory=8000

php -d memory_limit=1G database --queue=emails artisan queue:work

但它们都不起作用,所以我假设还有更多我没有理解的事情。

我正在考虑实施主管有Laravel的文档建议,但首先我想了解为什么会发生这种情况。

有人曾经成功解决过同样的问题吗?

php laravel queue
1个回答
0
投票

队列工作人员有意设置运行时限制 - 这有助于操作系统管理潜在的内存泄漏、系统资源锁定……线程运行时间越长,这些问题就会累积。

易于修复。其中任何一项都可以让您重回正轨:

  • 您可以每分钟安排一个任务来运行队列工作程序 'php artisan 队列:工作 --stop-when-empty'
  • 或者安装 Horizon 来自动化队列工作人员管理
© www.soinside.com 2019 - 2024. All rights reserved.