【问题标题】:Beanstalkd job switching to "ready" stateBeanstalkd 作业切换到“就绪”状态
【发布时间】:2015-02-24 15:47:59
【问题描述】:

我正在使用 Laravel 和 Beanstalkd 队列驱动程序运行。我有一些长时间运行的作业,我遇到了一个问题,大约 60 秒左右后,作业将从保留状态移回就绪状态。该作业仍在运行,并且没有问题地完成。问题是,如果添加了另一个作业,它将不会在下一个运行,而是前一个已移回就绪状态的作业将运行。如果作业在添加另一个作业之前完成,则不是问题。

这是我的代码。

队列推送:

  Queue::push('myApp\Processors\BuildQuick', $job);

职位代码:

public function fire($job, $data) {
         try {
         //some code here that calls another class to build an amazon ec2
         } catch (\Exception $ex) {
            \Logging::joblog($ex->getMessage(), "ERROR");
            $job->delete();
            return;
         }
      }

      $job->delete();
      \Logging::joblog("Job Completed Successfully", "INFO");
   }

更新: 我已经用睡眠定时器对此进行了测试,每次都恰好发生在 1 分钟。我知道它不会抛出任何异常,我的代码所做的只是休眠 2 分钟。

【问题讨论】:

    标签: laravel laravel-4 beanstalkd


    【解决方案1】:

    我终于找到了导致这个问题的原因!

    https://github.com/laravel/framework/issues/3480

    这是在 laravel 4.1 中添加的,我不知道它存在。您必须更改队列配置中的默认 ttr。希望这对其他人有帮助!

    【讨论】:

    • 简而言之,默认的 'ttr'(运行时间)默认为 60 秒。如果您有任何工作可能需要更长的时间,您需要在初始配置中添加'ttr' => {number-of-seconds}。似乎还没有一种正式的、干净的方式来为每个作业设置 TTR。
    猜你喜欢
    • 2021-12-10
    • 2020-01-25
    • 2021-07-10
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    相关资源
    最近更新 更多