为什么Laravel或Beanstalkd会跳过工作?

时间:2014-11-09 23:37:03

标签: php laravel supervisord beanstalkd

我正在使用 Laravel Queues beanstalkd 管理音频转换,由 supervisord 监控。

当用户上传音频文件时,会转到触发AudioController.php的{​​{1}},Queue::push('AudioProcess')会触发exec('sh some_script.sh some_audio.mp3')来处理音频,并将应用音频模型状态设置为{ {1}}完成后。

我做了一堆上传测试,这里是记录 Audio upload records

1表示1工作程序已被执行,AudioProcess.php表示0工作程序尚未执行。

我想它可能来自Laravel Queues管理或beanstalkd,但我在日志中找不到任何相关内容(AudioProcess.php,我的主管laravel.logqueue.log)。< / p>

我正在同一台服务器上运行一个临时和生产环境,因此有两个Laravel应用程序,因此同时运行两个php_errors.log命令(每个命令都指定了php artisan queue:listen),如果它与我的问题有关。它几周前运作良好,然后我放弃了一段时间并最近收回了它。我也做了一些--env

为什么Laravel或beanstalkd没有处理所有工作?

1 个答案:

答案 0 :(得分:3)

问题很可能发生,因为两个php artisan queue:listen(对于每个环境)都将作业发送到同一个beanstalkd队列(default)。它导致了某种冲突,但我不能说更多......

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

怎么做

  • 创建一个覆盖的app/config/[environment]/queue.php 来自[connections => [beanstalkd => [queue]]]的{​​{1}}参数 到那个环境的名称。

  • 指定队列的名称 工匠:default