其他分享
首页 > 其他分享> > 为什么Laravel或Beanstalkd跳过作业?

为什么Laravel或Beanstalkd跳过作业?

作者:互联网

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

当用户上传音频文件时,它会转到AudioController.php并触发Queue :: push(‘AudioProcess’),该队列本身会触发exec(‘sh some_script.sh some_audio.mp3’)处理音频并设置完成后,应用程序音频模型状态为1.

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

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

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

我在同一台服务器上运行暂存和生产环境,因此有两个Laravel应用程序,因此有两个php artisan队列:侦听同时运行的命令(每个命令都指定了–env)(如果有的话)与我的问题.几周前它运行良好,然后我放弃了该项目一段时间,最近又收回了它.我做了一些易于获取的更新&&易于获得升级.

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

解决方法:

由于两个php artisan queue:listen(针对每个环境)正在将作业发送到相同的beantalkd队列(默认),因此可能发生了此问题.这导致了某种冲突,但我不能说更多…

我通过使每个环境的php artisan队列固定它:侦听将作业发送到[environment]队列.因此,我现在有两个队列,暂存和生产队列.

怎么做

>创建一个app / config / [environment] /queue.php覆盖
[连接=> [beanstalkd => [queue]]参数从默认值开始
该环境的名称.
>指定队列名称以
工匠:php工匠队列:listen –queue = [环境]

标签:supervisord,laravel,beanstalkd,php
来源: https://codeday.me/bug/20191121/2048944.html