【问题标题】:Why is Laravel or Beanstalkd skipping jobs?为什么 Laravel 或 Beanstalkd 跳过工作?
【发布时间】:2015-01-06 05:09:45
【问题描述】:

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

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

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

1 表示AudioProcess.php worker 已执行,0 表示AudioProcess.php worker 尚未执行。

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

我在同一台服务器上运行一个登台和一个生产环境,所以有两个 Laravel 应用程序,因此同时运行两个 php artisan queue:listen 命令(每个都指定了 --env),如果它有什么需要的话做我的问题。几周前它运行良好,然后我放弃了一段时间,最近又重新获得了它。我也做了一些apt-get update && apt-get upgrade

为什么 Laravel 或 beanstalkd 不处理所有作业?

【问题讨论】:

  • 你是如何设置你的主管,分享一些代码,运行的吗?
  • supervisord 正在运行并加载了正确的配置,并且它应该运行的守护进程(php artisan queue:listen --env=[...] for stagingproduction)正在运行。问题来自 Laravel 队列或 beanstalkd,它们不能完成所有工作。无论如何它对你有用,这里是supervisord main configurationstaging configuration
  • 另外,ps afx 中的here is a dump 涉及supervisordphp
  • 我在您的supervisor config file 中没有找到任何[program] 部分。另外,您是否在终端/命令提示符下使用add <process_name> 命令添加了进程?
  • 查看暂存配置(第二个链接)。是的,它已正确添加并正在运行,正如您在 ps afx 转储中看到的那样。

标签: php laravel supervisord beanstalkd


【解决方案1】:

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

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

怎么做

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

  • 指定队列的名称 工匠:php artisan queue:listen --queue=[environment]

【讨论】:

  • 谢谢,这让我失去了理智!我在同一台服务器上有三个站点,并且作业被错误的队列接走
猜你喜欢
  • 2022-11-08
  • 1970-01-01
  • 2021-10-17
  • 2016-12-13
  • 2015-09-14
  • 2015-02-17
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
相关资源
最近更新 更多