为什么Laravel或Beanstalkd跳过作业?

rya*_*cey 5 php beanstalkd supervisord laravel

我正在使用Laravel Queuesbeantalkd管理音频转换,并由supervisor进行监视

当用户上传音频文件时,它会AudioController.php触发一个Queue::push('AudioProcess'),它本身也会触发一个exec('sh some_script.sh some_audio.mp3')来处理音频并将应用程序的音频模型状态设置为1完成时。

我做了很多上传测试,这是记录 音频上传记录

1表示该AudioProcess.php工作人员已被处决,而0AudioProcess.php工作人员尚未被处决。

我想它可能来自Laravel Queues管理或beantalkd,但我在日志中找不到任何相关内容(laravel.log,我的主管queue.logphp_errors.log)。

我在同一台服务器上运行暂存和生产环境,因此有两个Laravel应用程序,因此两个php artisan queue:listen命令同时运行(每个命令都--env指定了),如果这与我的问题有关。几周前它运行良好,然后我放弃了该项目一段时间,最近又收回了它。我做了一些apt-get update && apt-get upgrade了。

为什么Laravel或beantalkd无法处理所有作业?

rya*_*cey 4

发生该问题的原因可能是两个php artisan queue:listen(对于每个环境)将作业发送到同一个 beanstalkd 队列 ( default)。这导致了某种冲突,但我不能透露更多......

我通过将每个环境的php artisan queue:listen发送作业发送到[environment]队列来修复它。因此我现在有两个队列,staging并且production

怎么做

  • 创建一个app/config/[environment]/queue.php[connections => [beanstalkd => [queue]]]参数覆盖default 为该环境的名称的参数。

  • 向 Artisan 指定队列名称:php artisan queue:listen --queue=[environment]