【问题标题】:Laravel queue timeout issueLaravel 队列超时问题
【发布时间】:2018-10-21 10:53:00
【问题描述】:

我的工作最多需要 6 个小时才能完成。我正在为队列使用 laravel 数据库驱动程序,以下是工作人员:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/laravel/artisan queue:work --queue=default,high,medium,low,least --daemon --timeout=86400
autostart=true
autorestart=true
user=root
numprocs=50
redirect_stderr=true
stdout_logfile=/var/www/html/laravel/worker.log

问题:

执行时的作业会立即从jobs 表中删除,进程开始执行队列。但是,该作业尚未完成,但仍会从 jobs 表中删除。理想情况下,它应保留在jobs 表中,直到工作未完成。

【问题讨论】:

  • Ideally it shall stay in jobs table till the job is not completed. 数据库驱动程序不是这样工作的,你为什么要关心它是否在作业表中直到它完成?
  • 为了跟踪作业是否完成,这就是要注意是否为这个的原因。
  • jobs 表不会提供给您。在 Job 本身中添加您自己的逻辑以在事件完成时启动它..
  • 非常感谢您的回复。我在 Github 上检查了 Laravel,他们说这只是框架的一部分。请参阅github.com/laravel/framework/issues/…如果我犯了任何错误,请提出建议。

标签: laravel laravel-5 laravel-5.6 supervisord


【解决方案1】:

我假设你使用Horizon?如果是这样,请在您的 config/horizon.php 中设置超时,如下所示:

'supervisor-1' =['connection' => 'long_running',
                 'queue'      => 'long_running',
                 'balance'    => 'simple',
                 'processes'  => 1,
                 'tries'      => 1,
                 'timeout'    => 21600], // 6h in seconds

还可以尝试调整config/queue.php 中的retry_after

【讨论】:

  • 我没有使用 Horizo​​n,我使用的是简单的 Laravel 数据库驱动程序。
猜你喜欢
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2018-03-15
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多